2013-04-10 40 views
0

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

这是我到目前为止有:

$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

In here I found如果我传递一个字符串作为行的第二个参数,我可以使用一个类来完成它。但我不知道我会如何做到这一点,以及我会在哪里放课。

我也可以得到结果作为一个数组与row_array()如果这将使工作更容易?

回答

2

作出这样的一个生日转换为年龄的关系:

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和你一样与任何其他物体做得到生日:

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

^h这可以帮助,随时提出更多问题=)

+0

这绝对是一个解决方案。我想知道如何通过一个函数来操纵它,例如? – jah 2013-04-10 14:33:48

+0

只是一个例子,我将如何使用$ userobject变量来实现,年龄事物并不是真的在问题内部。我真的很感谢你的帮助(: – jah 2013-04-10 14:42:24

+0

我有点困惑,你可以通过$ userobject-> birthdate编辑和检索出生日期。你是指通过函数来​​操作它吗? – Crowlix 2013-04-10 14:46:01

0

林不知道这是否有帮助。 我会放一点点函数模型是这样的:

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; 
} 

然后只适用,如果像$年龄= datetoage查询数据($行[生日]);