[英]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.