2014-11-21 90 views
0

我有3個型號,與此關係:CakePHP的關聯條件

class A extends AppModel { 
    public $belongsTo = array(
     "B" => array(
      'className' => 'B', 
      'foreignKey' => 'b_id' 
     ) 
    ); 
} 

class B extends AppModel {  
    public $belongsTo = array(
     "C" => array(
      'className' => 'C', 
      'foreignKey' => 'c_id' 
     ) 
    ); 
} 

class C extends AppModel {  
} 

第一,與此代碼獲取模型中的記錄:

$this->A->find('all', array('recursive'=>2)); 

當打印查詢日誌,而不是兩個左連接,此查詢被看到:

SELECT * FROM A LEFT JOIN B ON (A.b_id = B.id) 

並且對於每個結果記錄,查詢以獲取所見的C模型信息:

SELECT * FROM C WHERE id = ? 

有沒有辦法用2連接查詢來做到這一點?

回答

1

我發現當CakePHP的通過多個查詢請問您的發現,你可以強制使用手冊,以獲得在一個單一的查詢連接:

$this->A->find('all', array(
    'recursive' => -1, 
    'joins' => array(
     array(
      'table' => 'b', 
      'alias' => 'B', 
      'type' => 'left', 
      'conditions' => array('B.id = A.b_id'), 
     ), 
     array(
      'table' => 'c', 
      'alias' => 'C', 
      'type' => 'left', 
      'conditions' => array('C.id = B.c_id'), 
     ), 
    ), 
);