2011-04-30 21 views
0

我想跨兩個HABTM表進行查詢。我有LeasesManagersTenantsProperties這是一個非常糟糕的方式來跨多個HABTM模型進行查詢嗎?

Managers HABTM Tenants
Managers HABTM Properties
Tenants HABTM Leases

我想要做的就是findTenantManagersProperties列表。我已經能夠完成下面的代碼查詢,但我只能檢索Property_id(從Managers_Property模型)而不是Property.name(從Property模型)。

我得到了嘮叨的感覺,我正在做一些非常錯誤或不必要的事情,但我一直在撞牆撞牆,一直無法弄清楚。

$conditionsSubQuery['`ManagersTenant`.`tenant_id`'] = $this->Auth->User('id'); 
     $dbo = $this->Lease->getDataSource(); 
     $subQuery = $dbo->buildStatement(
      // SELECT `ManagersTenant`.`manager_id` FROM `managers_tenants` AS `ManagersTenant` WHERE `ManagersTenant`.`tenant_id` = $this->Auth->User('id') 
      array(
       'fields' => array('`ManagersTenant`.`manager_id`'), 
       'table' => $dbo->fullTableName($this->Lease->LeasesManager->Manager->ManagersTenant), 
       //'table' => $dbo->fullTableName($this->Lease->Property->ManagersProperty->Manager->ManagersTenant), 
       'alias' => 'ManagersTenant', 
       'limit' => null, 
       'offset' => null, 
       'joins' => array(), 
       'conditions' => $conditionsSubQuery, 
       'order' => null, 
       'group' => null 
      ), 
      $this->Lease->LeasesManager->Manager->ManagersTenant 
      //$this->Lease->Property->ManagersProperty->Manager->ManagersTenant 
     ); 
     $subQuery = ' `ManagersProperty`.`manager_id` IN (' . $subQuery . ') '; 
     $subQueryExpression = $dbo->expression($subQuery); 
     $conditions[] = $subQueryExpression; 
     $properties = $this->Lease->Property->ManagersProperty->find('list', array(
      'conditions' => $conditions, 
      'fields' => array('property_id',), 
      'recursive' => 3 
      ) 
     ); 

任何幫助,非常感謝。

回答

0

好像你應該使用中可容納的行爲:http://book.cakephp.org/view/1323/Containable

$contain = array(
    'Manager' => array(
     'Property' 
    ) 
); 
$conditions = array('Tenant.id' => $this->Auth->user('id')); 
$tenants = $this->Tenant->find('first', array('conditions'=>$conditions, 'contain'=>$contain)); 
+0

中可容納不會讓我指定「遠」表查詢條件。 – Ben 2011-11-01 15:02:21

相關問題