我有三个具有相关属性的模型:
链接型号:
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 LinkCategory
。id
,LinkCategory
。title
,LinkCategory
。created
,LinkCategory
。modified
来自link_categories
AS LinkCategory
WHERE User
。id
= 1
我是CakePHP的新手,但不是MVC。在我看来,这应该适用于我的协会。我是否遗漏了某些内容,或者由于某种原因这在CakePHP中无效。
答案 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)));