2017-03-18 22 views
0

現在、私はCakePHP 3.xで作業しており、以下のユースケースを持っています。複数の関連テーブルからデータを取得するCakePHPコントローラメソッド

  1. 部門(ID、名前、説明)
  2. 呼称(ID、名前、説明)
  3. ユーザ(ID、名前、説明)
  4. DepartmentDesignations(ID、departments_id、designations_id)
  5. DepartmentDesignationUsers(ID、department_designations_id、users_id)

上記の5つのテーブルとその列は、次のとおりです。角かっこ。以下は、これらの間の関係です。

  1. 部門には多くの名称があります。だから私は別のDepartmentDesignationsを作成したこれを処理するために。
  2. 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配列内にユーザー情報が必要です。この場合、私は何をする必要がありますか?

答えて

0

DepartmentsとUsersテーブルの間に直接の関係はありませんので、ユーザーにはその方法を使用することはできません。

public function index() 
{  
    $departments = $this->Departments->find('all') 
    ->contain('DepartmentDesignations.Designations','DepartmentDesignations.DepartmentDesignationUsers.Users');  
    $this->set(compact('departments')); 
    $this->set('_serialize', ['departments']);   
} 

はこちらをご覧ください:Retrieving Associated Data in CakePHP3

はそれをこのような何かをしてください。