这是一个混乱的,因为我正在尝试编写一个使用两个HABTM关系的蛋糕。
我有一个名为projects的表,它与users表有一个HABTM关系。它使用中间表projects_users,用于HABTM关系。
然后用户过去只与departments表有一个belongsTo关系。 users表有一个名为department_id的外键。但现在这种关系已改为HABTM;并删除了外键,department_id,并在其位置创建了表department_users。
所以旧的发现声明,我正在努力改变,过去看起来像这样:
$projectsUsers = $this->Project->ProjectsUser->find('all', array(
'conditions' => array(
'ProjectsUser.project_id' => 1,
'User.department_id' => 25
),
'recursive' => 0,
'contain' => array(
'User' => array(
'fields' => array(
'id',
'department_id'
)
)
)
));
必须更改哪个,因为users表不再具有department_id。
所以我的第一个目标是改变上面的内容,包括departments_users和departments。我尝试注释掉department_id字段并将递归设置为2.这是我的蛋糕查找声明:
$projectsUsers = $this->Project->ProjectsUser->find('all', array(
'conditions' => array(
'ProjectsUser.project_id' => $projectId
),
'recursive' => 2,
'contain' => array(
'User' => array(
'fields' => array(
'id'
)
)
)
));
这是它在调试器中所做的:
Array
(
[0] => Array
(
[ProjectsUser] => Array
(
[id] => 9999
[user_id] => 999
[project_id] => 999
[status] => active
)
[User] => Array
(
[id] => 999
)
)
...
我希望设置递归到2将包括部门并在调试器中生成类似的内容:
Array
(
[0] => Array
(
[ProjectsUser] => Array
(
[id] => 9999
[user_id] => 999
[project_id] => 999
[status] => active
)
[User] => Array
(
[id] => 999
)
[Department] => Array
(
[0] => Array
(
[id] => 9
[DepartmentsUser] => Array
(
[id] => 99999
[department_id] => 9
[user_id] => 9999
)
)
)
)
...
但这就是我被困住的地方。我在网上发现很多关于在cakePHP中显示一个HABTM关系的帖子,但不是两个。我试过在一个包含内做一个包含;但这是一个错误。我甚至只是在蛋糕里做了简单的SQL;但它产生了一个没有其他输出的空数组。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
您需要使用JOIN(see details here)而不是包含。如果您尝试这样做,并且无法使其正常工作,请将您的新尝试作为一个问题发布,我们可以从那里提供帮助。
PS - 您发布的代码存在许多问题,但由于我认为这不是正确的方向,因此可能没有必要详细介绍。