2010-08-30 258 views
1

是否有可能创建一个hasMany关系,该关系使用模型之外的ID?例如,一个用户有很多评论,但我想找到登录的用户的只是评论:CakePHP,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' => '' 
     ) 
); 

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

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

+0

我在这里得到了一个非常好的答案这个问题:http://stackoverflow.com/questions/3619891/hasmany-relationship-and-id-from-other-model-in-cakephp – chris 2010-09-02 09:18:38

回答

0

你是否总是只想访问登录用户的评论?你不打算在某个时间点显示其他人的评论吗?

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

此外,根据特定类型的关系,您可能需要使用可包含行为根据相关模型标准(通常针对HABTM而不是HM)进行筛选。

+0

谢谢你的回答和对不起对我的不好解释。请在@cdburgess回答中看到我的评论。 – chris 2010-08-31 10:08:47

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

那么你是好去和你的控制器不仅非常干净的,但你可以在任何地方拨打这个模型的具体方法,而不必每次写条件。如果条件改变,您可以在一个地方更换它,而不是在设置条件的控制器中的任何地方。

+0

好的,我的解释非常糟糕,对不起。 我想获得所有评论,每个评论有不同用户的许多“喜欢”。现在我需要知道登录的用户是否喜欢评论。 这就是为什么我想在模型中创建一个特殊的关系,它告诉我登录的用户是否喜欢评论。 – chris 2010-08-31 10:05:39