2012-12-05 71 views
0

我對CakePHP很陌生(昨晚開始),並且遇到查詢問題。關於與CakePHP模型的多個關聯的查詢

我的模型的工作原理是這樣的:

Classgroups < < hasAndBelongsTo >>用戶< < hasAndBelongsTo >> PermissionsGroups

基本上是一個Classgroup是由用戶的負載,每個用戶都屬於某個權限組。該組定義了他們的用戶類型以及他們的權限。

現在我需要做一個查詢,我得到屬於某個PermissionGroup的所有用戶,但是我正在從ClassgroupsController中進行操作。

但是每當我試圖做到這一點:

$this->Classgroup->User->find('list', array(
      'fields' => array('User.surname_firstname'), 
      'order' => array(
        'User.surname_firstname' 
       ), 
      'conditions' => array(
        'PermissionGroup.permissions' => '10' 
       ) 
     ) 

我得到這個錯誤:

Column not found: 1054 Unknown column 'PermissionGroup.permissions' in 'where clause' 

因爲我在ClassgroupController我就好像集團字段不能待觀察,但我會假設因爲用戶與PermissionGroup關聯應該沒問題。我已經建立了3個模型之間的關聯,但問題似乎是查詢對模型沒有足夠「深入」。

我也嘗試將查找的遞歸值設置爲2,3和4.從我讀過的內容中,我認爲這可能不是一個好主意,Containable更好但肯定它應該至少可以工作?

我還應該指出,這些關聯是一種方式。我只將它們添加到我需要的模型中。所以Classgroups有一個關聯到用戶和用戶有一個關聯PermissionGroup

我在做什麼明顯錯誤?或者我誤解了一個CakePHP概念? 感謝

更新:對於第二次我看到有人說我應該使用連接,像這樣:

'joins'=>array(
    array(
     'table'=>'rooms', 
     'alias'=>'Room', 
     'type'=>'inner', 
     'conditions'=>array(
       'Room.hotel_id'=>'Hotel.id' 
     ) 
    ) 

但我這做一種過時的感覺......我我也試過使用包含如下:

'contain' => array(
       'Group' => array(
        'conditions' => array(
         'Group.name' => '10' 
        ) 
       ) 
      ) 

但它沒有工作,我仍然得到了所有的用戶。

+0

加入可能是最好的選擇......你爲什麼要加入房間?你不應該加入PermissionGroup嗎? –

+0

對不起,這是我在別處找到的我從未改變的代碼片段。 – carlmango11

回答

1

你在正確的軌道上加入:

$joins = array(
    array(
    'table'=>'permission_groups', 
    'alias'=>'PemissionGroup', 
    'type'=>'inner', 
    'conditions'=>array(
      'User.id = PermissionGroup.user_id', 
      'PermissionGroup.permissions = 10' 
    ) 
) 


    $this->Classgroup->User->find('list', array(
     'fields' => array('User.surname_firstname'), 
     'joins' => $joins, 
     'order' => array(
       'User.surname_firstname' 
      ) 
    ) 

嘗試與合作!

+0

非常感謝您的工作。我真的厭倦了試圖讓它工作,你救了我一些我的理智。 哦,我應該向其他人指出我必須做兩個連接,因爲我的關係是多對多的。第一個是擁有permissions_groups_users的用戶。第二個是permission_groups的permission_groups_users。 – carlmango11

+0

嘿,太棒了!做得好 –