操纵db会导致编码器


manipulating db results in codeigniter

我在我的数据库中有一些信息,我希望能够在将它们传递给控制器和视图之前进行操作。例如,我有一个出生日期,我想把它变成年龄。

这是我目前为止写的:

$sql = ('SELECT username, birthdate, profile_text FROM users WHERE id = ?');
$q = $this->db->query($sql, $this->session->userdata('user_id'));
if ($q->num_rows() === 1) {
    return $q->row();
}

因此,在返回它之前,我想操作对象中的birthdate

在这里我发现,如果我传递一个字符串作为行的第二个参数,我可以使用一个类来做到这一点。但是我不知道该怎么做,也不知道该把这个类放在哪里。

我也可以得到结果与row_array()数组,如果这会使工作更容易?

创建一个将出生日期转换为年龄的函数:

public function convertToAge($birthdate){
         $birthDate = explode("/", $birthDate);
         $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1],
       $birthDate[2]))) > date("md") ? ((date("Y")-$birthDate[2])-1):(date("Y")-
$birthDate[2]));
return $age
}

你可以设置一个自定义对象来解决你的问题,像这样:

$sql = ('SELECT username, birthdate, profile_text FROM users WHERE id = ?');
$q = $this->db->query($sql, $this->session->userdata('user_id'));
if ($q->num_rows() === 1) {
    $userobject = $q->row();
}
$userobject->birthdate = $this)>convertToAge($userobject->birthdate);
return $userobject

在你的应用程序的其他部分,你可以检索你的用户对象和获得生日,就像你做任何其他对象:

$userobject = $this->model->getuserobject()
$birthdate = $userobject->birthdate

希望这对你有帮助,请随时提问=)

我不确定这是否有帮助。我将在模型中添加这样一个小函数:

public function datetoage()
 {
 $birthDate = $datetouse;
         //explode the date to get month, day and year
         $birthDate = explode("/", $birthDate);
         //get age from date or birthdate
         $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1],  $birthDate[2]))) > date("md") ? ((date("Y")-$birthDate[2])-1):(date("Y")-$birthDate[2]));
         return $age;
}

然后将其应用于查询数据,如$age = datetoage($row[birthdate]);