CakePHP中的HasAndBelongsToMany

时间:2010-05-13 18:05:51

标签: cakephp

我有三个具有相关属性的模型:

链接型号:

var $belongsTo = array('LinkCategory');

LinkCategory模型:

var $hasMany = array('Link');
var $hasAndBelongsToMany = array('User');

用户模型

var $hasAndBelongsToMany = array('LinkCategory');

有了这个,我希望以下内容能够为我提供用户的所有链接类别。

$user_link_categories = $this->LinkCategory->find('all', array('conditions' => array('User.id' => 1)));

然而,它死于: 'where子句'中的未知列'User.id' 查询:SELECT LinkCategoryidLinkCategorytitleLinkCategorycreatedLinkCategorymodified来自link_categories AS LinkCategory WHERE Userid = 1

我是CakePHP的新手,但不是MVC。在我看来,这应该适用于我的协会。我是否遗漏了某些内容,或者由于某种原因这在CakePHP中无效。

2 个答案:

答案 0 :(得分:0)

LinkCategory没有字段User.id ...事实上,User.id中间有句号的方式表明id是一个字段属于User

由于LinkCategory belongsTo一个User它可能有一个字段user_id,所以理论上这应该有效:

$user_link_categories = $this->LinkCategory->find('all', array('conditions' => array('user_id' => 1)));

如果这仍然不起作用,则意味着您的数据库表没有列来支持这些关系,您需要read more about associations才能找到它的底部。

但就个人而言,我认为你会倒退。您尝试根据关联的LinkCategory找到User,但是您无法在简单的User中使用其他模型(find())中的字段(在LinkCategory上)。

相反,您应该找到id为'1'的用户,然后 - 从User belongsTo LinkCategory开始 - 读取User' s LinkCategory。再一次,我生锈了,但我觉得它看起来有点像......

$user = $this->User->find('first', array('conditions' => array('Article.id' => 1)));
pr($user);

...让recursive(请参阅here)和$user同时加载您的LinkCategory

答案 1 :(得分:0)

  

我有三个具有相关属性的模型:

     

链接模型

应该有链接模型,而不是链接。我希望这是一个印刷错误。

  

LinkCategory模型

     

...

     

var $ hasAndBelongsToMany = array('User');

我想这意味着你有连接表link_categories_users,因此你需要将递归值更改为2:

$user_link_categories = $this->LinkCategory->find('all', array('recursive' => 2, 'conditions' => array('User.id' => 1)));

或者:

$user_link_categories = $this->LinkCategory->find('all', array('recursive' => 2, 'conditions' => array('LinkCategoryUser.user_id' => 1)));

或者:

$user = $this->User->find('first', array('recursive' => 2, 'conditions' => array('User.id' => 1)));

<强> 更新 即可。 必须工作:

$user_link_categories = $this->LinkCategory->User->find('all', array('conditions' => array('User.id' => 1)));