在关系中使用self :: STAT来查找单个最新的相关记录

时间:2014-03-19 03:40:17

标签: php sql yii

我现在分别有两个表tbl_usertbl_log,以及UserLog个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始终来自id表中tbl_log最小的记录,可能是由于 GROUP BY ORDER BY的行为关于SQL查询。

现在,我想知道如何(如果可能的话)通过使用类似的方法(即在ActiveRecord类中使用关系)来实现这一点?提前谢谢。

1 个答案:

答案 0 :(得分:0)

要去的想法是使用'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'));