2014-11-21 55 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'), 
     ), 
    ), 
);