繁体   English   中英

Cakephp HABTM需要多个联接

[英]Cakephp HABTM with multiple joins needed

我是Cakephp的新手。 我的所有模型关联都工作正常,但是这让我很沮丧,而且我还没有找到解决类似问题的任何人。 开始..

我有4张桌子:

+-----+-------------------+
| Id  | first_name        |
+-----+-------------------+
|   1 | jim               | 
|   2 | bob               | 
+-------------------------+

facility_project_people

+-----+---------------------+-----------+
| Id  | facility_project_id | person_id |
+-----+---------------------+-----------+
|   1 |          5          |     1     |
|   2 |          6          |     1     |
|   3 |          7          |     2     |
+---------------------------+-----------+

facility_projects

+-----+-------------+-----------+-----------+
| Id  | facility_id | project_id|  type_id  |
+-----+-------------+-----------+-----------+
|   1 |       1     |     1     |     1     |
|   2 |       2     |     3     |     2     |
|   3 |       2     |     5     |     3     |
+-------------------+-----------+-----------+

项目

+-----+-------------+
| Id  | name        |
+-----+-------------+
|   1 |  Audit      | 
|   2 |  Inventory  | 
|   3 |  Tax        |
|   4 |  Consulting |
+-------------------+

所以我有些人可以参与每个机构的许多项目
我正在尝试建立模型关联,以使从Person到他们参与的项目。

MySQL查询类似于:
SELECT p.first_name, pr.name FROM people p left join facility_project_people fpp ON p. id = fpp. person_id left join facility_projects fp ON fpp.facility_project_id = fp.id left join projects pr ON fp.project_id = pr.id

通过使用hasAndBelongsToMany关联,我了解了如何到达facility_projects表。

class Person extends AppModel {
    public $hasAndBelongsToMany = array(
    PersonFacilityProject' => array(
            'className' => 'Project',
            'joinTable' => 'facility_project_people',
            'foreignKey' => 'person_id',
            'associationForeignKey' => 'facility_project_id',
        ),
    }
} 

显然,这不能满足我的需求

当查看一个人时,我希望看到相关的项目,但是我对如何进入项目表感到困惑。 我希望能够向该关联添加另一个联接表和外键,但是cakephp似乎不允许这样做。

我感谢任何见识。

您没有说明正在使用的cakephp版本。 但是,您可以使用“包含”来执行此操作(因为并非所有模型都直接相关),如下所示:

    $conditions = [
        'contain' => [
            'FacilityProjectPerson'=>[
                'FacilityProject'=>[
                    'Project'=>[
                        'fields'=>['Project.name']
                    ],
                ],
            ], 
        ],
    //  'conditions' => [//just in case you need conditions for selecting people
    //      'Person.id' => $this->id, 
    //  ],
        'fields'=>['Person.first_name']
    ];

    $this->Person->find('all',$conditions);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM