2017-03-18 85 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中定義了以下函數,我的期望是我需要在單個調用中獲得以下所有信息。 - 所有部門 - 在每個部門的所有名稱(如果有的話) - 所有用戶每個部門指定的(如果有的話)

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

根據您的信息, 部門和用戶表之間沒有直接關係,因此您不能使用包含該方式的用戶。

讓它像這樣:

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

相關問題