2012-04-22 56 views
0

我使用cakephp 2.1.1。 這是我的桌子協會:x hasmany y hasmany z hasmany w。CakePHP 2.1.1。可容忍的行爲不起作用

一切都是正確的設置我想,但是當我做這個查詢:

$conditions = array(
'contain' => array(
'y' => array (
      'z' => array(
       'w'=> array(
        'conditions' => array('col>=' => $q)) 
    ) 
) 
)); 

$this->loadmodel('x'); 
$o=$this->x->find('all',$conditions);//array(
debug($o); 

我沒有我想要的結果;只有表格x被提取!爲什麼? 例如,這是我的模型X的PHP代碼,類似於其他:

<? php 

class x extends AppModel 
{ 
    var $name='x'; 
    public $actsAs = array('Containable'); 
    public $hasMany = array('y'); 
} 

也許CakePHP的版本? 謝謝!

信息:我要讓聲明是這樣的:

select z.col1, y.col2, x.col3 
from z, y, x, w 
where w.col>= 3 
and w.z_id = z.id 
and z.y_id = y.id 
and z.x_id = x.id 

回答

1

有相當多的點這裏。首先,如果行爲不起作用,那麼可能不會假設任何事情,最重要的是一切都很好! ;)

我認爲你已經剝離了大量的代碼,因爲你的關係沒有定義任何外鍵,如果Cake要連接你的模型,這是非常關鍵的。

不知道你爲什麼使用loadModel(),因爲這種事情應該在模型X的控制器或X模型中完成。所以你不應該加載模型。如果您的關聯工作正常,則Contain將隨着模型一起加載模型。

至於你預期的SQL語句,不幸中可容納不加入模型這樣的,並會加入少數機型,但如果你有hasMany它將運行一系列SELECT語句來獲得額外的數據,然後加入它一起。

它也使用LEFT JOIN而不是您預期的CROSS JOIN。這可以在Containable的選項中配置,或者你可以實例化一個新的db對象並創建一個子查詢。

要回到你的問題,

希望這給你一個起點,如果你還沒有解決這個當然!