我现在有两个表tbl_user
和tbl_log
,和User
和Log
ActiveRecord类分别。
tbl_log
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`log_date` datetime NOT NULL,
`remarks` varchar(255) NOT NULL,
用户类关系
public function relations() {
return array(
'rLog' => array(self::HAS_MANY, 'Log', 'user_id'),
);
}
我想要实现的是检索tbl_log
上属于某个用户的最新记录。
我试图添加以下关系到User
类:
'lastLogDate' => array(self::STAT, 'Log', 'user_id', 'select'=>'log_date', 'order'=>'log_date DESC', 'group'=>'user_id', 'defaultValue'=>'N/A'),
,这样我就可以从最近的记录中检索log_date
,通过调用如下代码:
$model = User::model()->findByPk($id);
echo $model->lastLogDate;
但后来我意识到它实际上不能正常工作。返回的log_date
总是来自tbl_log
表中id
最小的记录,可能是由于SQL查询GROUP BY和ORDER BY的行为。
所以现在,我想知道如何(如果可能的话)通过使用类似的方法来实现这一点(即在ActiveRecord类中使用关系)?
这个想法是使用'order'和'limit',例如:
'order'=>'log_date DESC',
'limit'=>1,
但是你错了,当使用这种类型的关系SELF::STAT
,它是用来计算记录的返回,而不是最近的记录
我通常不这么用,下面是我的用法:
在Log
模型中,您应该有:
public function relations()
{
return array(
'belongUser' => array(self::BELONGS_TO, 'User', 'user_id'),
}
就像在
下面//get first found Log record of the user by given user_id and sort by log_date DESCENDANT
$lastLogDateRecord = Log::model()->with(array(
'belongUser' => array(
'condition' => 'user_id = :user_id',
'params' => array('user_id'=>$id) //$id is user_id param what user want
)
))->findByAttributes(array(), array('order' => 'log_date DESC'));