【问题标题】:CakePHP find with two HABTM relationshipsCakePHP 找到两个 HABTM 关系
【发布时间】:2015-01-15 17:22:03
【问题描述】:

这是一个混乱的,因为我正在尝试编写一个使用两个 HABTM 关系的蛋糕发现。

我有一个名为 projects 的表,它与 users 表有 HABTM 关系。它使用中间表 projects_users 来表示 HABTM 关系。

然后用户过去只是与部门表有一个 belongsTo 关系。 users 表为此有一个名为 department_id 的外键。但是现在这种关系已经变成了HABTM;并且外键department_id 被删除,并在其位置创建了表department_users。

所以旧的 find 语句,我正在努力改变,过去看起来像这样:

$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,因此必须更改。

所以我的第一个目标是更改上述内容以包括部门用户和部门。我尝试注释掉 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;但它产生了一个没有其他输出的空数组。任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: php database cakephp


    【解决方案1】:

    您需要使用 JOIN (see details here) 而不是包含。如果您尝试这样做,但无法使其完全正常工作,请将您的新尝试作为问题发布,我们可以从那里提供帮助。

    PS - 您发布的代码存在许多问题,但由于我认为这不是正确的方向,因此可能没有必要详细讨论。

    【讨论】:

    • 感谢您为我指明方向。我现在比以前更接近工作了。我想我会用我的新尝试发布另一个问题。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多