2014-03-19 33 views
0

我现在分别拥有两个表tbl_usertbl_logUserLog ActiveRecord类。使用self :: STAT关系查找单个最新相关记录

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,这可能是由于GROUP BYORDER BY ORDER BY对SQL查询的影响。

所以,现在我想知道如何通过使用类似的方法(如使用ActiveRecord类中的关系)来实现此目的?提前致谢。

回答

0

的想法去使用“秩序”和“限价”,例如:

'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'));