0
現在、私はCakePHP 3.xで作業しており、以下のユースケースを持っています。複数の関連テーブルからデータを取得するCakePHPコントローラメソッド
- 部門(ID、名前、説明)
- 呼称(ID、名前、説明)
- ユーザ(ID、名前、説明)
- DepartmentDesignations(ID、departments_id、designations_id)
- DepartmentDesignationUsers(ID、department_designations_id、users_id)
上記の5つのテーブルとその列は、次のとおりです。角かっこ。以下は、これらの間の関係です。
- 部門には多くの名称があります。だから私は別のDepartmentDesignationsを作成したこれを処理するために。
- DepartmentDesignationsには多くのユーザーがいます。ですから、私はDepartmentDesignationUsersを作成しました。
私はDepartmentsControllerで次のような関数を定義しています。私は次の情報をすべて1回の呼び出しで取得する必要があります。 - すべての部門 - 各部門のすべての名称(もしあれば) - 各部門の指定のためのすべてのユーザは、(もしあれば)
public function index()
{
$departments = $this->Departments->find('all')
->contain('DepartmentDesignations.Designations')
->contain('Users');
$this->set(compact('departments'));
$this->set('_serialize', ['departments']);
}
は、私はまた、
DepartmentsTable.phpに、次の定義されています$this->belongsToMany('Designations', [
'joinTable' => 'department_designations',
'foreignKey' => 'departments_id',
'targetForeignKey' => 'designations_id'
]);
$this->hasMany('DepartmentDesignations', [
'className' => 'OrganizationManagement.DepartmentDesignations',
'foreignKey' => 'departments_id'
]);
$this->hasMany('DepartmentDesignationUsers',[
'className' => 'OrganizationManagement.DepartmentDesignationUsers',
'foreignKey' => 'department_designations_id'
]);
$this->belongsToMany('Users',[
'joinTable' => 'department_designation_users',
'foreignKey' => 'department_designations_id',
'targetForeignKey' => 'users_id'
]);
次のような回答があります。
{
"departments": [
{
"id": 1,
"name": "Organization",
"description": "",
"parent_id": 0,
"users": [],
"department_designations": [
{
"id": 1,
"departments_id": 1,
"designations_id": 1,
"designation": {
"id": 1,
"name": "Brand head",
"description": "",
"level": 1
}
},
{
"id": 6,
"departments_id": 1,
"designations_id": 6,
"designation": {
"id": 6,
"name": "CEO",
"description": "",
"level": 1
}
}
]
},
{
"id": 2,
"name": "Production",
"description": "",
"parent_id": 1,
"users": [],
"department_designations": [
{
"id": 3,
"departments_id": 2,
"designations_id": 5,
"designation": {
"id": 5,
"name": "Production assistant manager",
"description": "",
"level": 3
}
},
{
"id": 5,
"departments_id": 2,
"designations_id": 4,
"designation": {
"id": 4,
"name": "Production head",
"description": "",
"level": 2
}
}
]
},
{
"id": 3,
"name": "R&D",
"description": "",
"parent_id": 1,
"users": [],
"department_designations": [
{
"id": 2,
"departments_id": 3,
"designations_id": 2,
"designation": {
"id": 2,
"name": "R&D Manager",
"description": "",
"level": 2
}
}
]
},
{
"id": 4,
"name": "Development",
"description": "",
"parent_id": 3,
"users": [],
"department_designations": [
{
"id": 4,
"departments_id": 4,
"designations_id": 2,
"designation": {
"id": 2,
"name": "R&D Manager",
"description": "",
"level": 2
}
}
]
},
{
"id": 5,
"name": "Purchase",
"description": "",
"parent_id": 1,
"users": [],
"department_designations": []
}
]
}
department_designations配列内にユーザー情報が必要です。この場合、私は何をする必要がありますか?