CakePHP 找到两个 HABTM 关系
CakePHP find with two HABTM relationships
这是一个混乱的过程,因为我正在尝试编写一个使用两个 HABTM 关系的蛋糕查找。
我有一个 table 命名项目,它与用户 table 有 HABTM 关系。它使用中介 table projects_users,用于 HABTM 关系。
然后用户过去只与部门有 belongsTo 关系 table。为此,用户 table 有一个名为 department_id 的外键。但现在这种关系已经变成了 HABTM;并且删除了外键 department_id,并在其位置创建了 table 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'
)
)
)
));
必须更改,因为用户 table 不再有 department_id。
所以我的第一个目标是更改以上内容以包括 departments_users 和部门。我尝试注释掉 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
)
)
...
我希望将 recursive 设置为 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;但它产生了一个没有其他输出的空数组。任何帮助,将不胜感激。谢谢。
您需要使用 JOIN (see details here) 而不是包含。如果您尝试这样做,但无法让它完全正确地工作,post 将您的新尝试作为一个问题,我们可以从那里提供帮助。
PS - 您 posted 的代码存在许多问题,但由于我认为这不是正确的方向,因此可能没有必要在细节。
这是一个混乱的过程,因为我正在尝试编写一个使用两个 HABTM 关系的蛋糕查找。
我有一个 table 命名项目,它与用户 table 有 HABTM 关系。它使用中介 table projects_users,用于 HABTM 关系。
然后用户过去只与部门有 belongsTo 关系 table。为此,用户 table 有一个名为 department_id 的外键。但现在这种关系已经变成了 HABTM;并且删除了外键 department_id,并在其位置创建了 table 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'
)
)
)
));
必须更改,因为用户 table 不再有 department_id。
所以我的第一个目标是更改以上内容以包括 departments_users 和部门。我尝试注释掉 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
)
)
...
我希望将 recursive 设置为 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;但它产生了一个没有其他输出的空数组。任何帮助,将不胜感激。谢谢。
您需要使用 JOIN (see details here) 而不是包含。如果您尝试这样做,但无法让它完全正确地工作,post 将您的新尝试作为一个问题,我们可以从那里提供帮助。
PS - 您 posted 的代码存在许多问题,但由于我认为这不是正确的方向,因此可能没有必要在细节。