2014-01-14 36 views
1

我在蛋糕一個很深的關聯關係:CakePHP的 - 最有效的深層檢查

User 
---- Garage 
---- ---- Vehicle 
---- ---- ---- VehicleAlbum 

什麼是檢查是否VehicleAlbum屬於用戶的最佳方法是什麼? 因爲做一個遞歸3是非常昂貴的。我研究過包含,這是最好的解決方案嗎?

謝謝,喬希。

回答

2

沒有遞歸3(see book)這樣的東西。

你也不能使用Containable來限制你的查找結果基於兒童條件(see reasoning)。

我想你會想這樣做(與車庫開始減少一個查詢所需的,因爲它的用戶ID作爲一個字段):如果

$this->Garage->find('all', array(
    'conditions' => array(
     'Garage.user_id' => $userId 
    ), 
    'joins' => array(
     array(
      'table' => 'vehicles', 
      'alias' => 'Vehicle', 
      'type' => 'inner', 
      'conditions' => array(
       'Vehicle.garage_id = Garage.id' 
      ) 
     ), 
     array(
      'table' => 'vehicle_albums', 
      'alias' => 'VehicleAlbum', 
      'type' => 'inner', 
      'conditions' => array(
       'VehicleAlbum.vehicle_id = Vehicle.id', 
       'VehicleAlbum.id' => $vehicleAlbumId 
      ) 
     ) 
    ) 
)); 

應該返回的結果(S)它是所有者,如果不是,則爲空。

0

不,它不會很昂貴,除非你做出錯誤的查詢。那麼寫一個查詢並加入所有四個表並運行解釋...然後檢查它是昂貴的還是便宜的。你的情況還有一件事,如果這些表如上所示連接,那麼你必須爲連接查詢付費,除了改變表之間的關係之外,沒有別的出路。