CakePHP,HasMany关系

时间:2010-08-30 16:09:09

标签: cakephp cakephp-1.3

是否有可能创建一个使用模型之外的ID的hasMany关系?例如,一个用户有很多评论,但我想只找到登录用户的评论:

public $hasMany = array(
    'MyComment' => array(
            'className' => 'Comment',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => array('Comment.user_id' => $loggedinUser_id),
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
);

我在考虑将控制器beforeFilter()中的$ loggedinUser_id传递给模型。这是解决这个问题的好方法还是有更好的方法?

任何建议表示赞赏。 非常感谢!

2 个答案:

答案 0 :(得分:2)

我会建议遵循“胖模型,皮肤控制器”的思维方式。我会在模型中构建一个名为:user_only_comments的函数(或者对你有用的东西)。

// in the comment model
function user_only_comments($id) {
   return $this->find('all', array('conditions' => array('Comment.user_id' => $id)));
}

然后在控制器中,您只需致电:

$user_comments = $this->Comment->user_only_comments($user_id);

然后你很高兴你的控制器不仅干净整洁,而且你可以在任何地方调用这种模型特定的方法,而不必每次都写出条件。如果条件发生变化,您可以在一个地方更改它,而不是在您设置条件的控制器中的任何位置。

答案 1 :(得分:0)

您是否始终只想访问登录用户的评论?您是不是想在某个时间点显示其他人的评论?

我建议您在控制器中每次调用Model :: find()时将其设置为一个条件。

此外,根据特定类型的关系,您可能需要使用Containable行为根据相关模型标准进行过滤(通常用于HABTM而不是HM)。