我發現兩種方法來解決這個問題。 第一個是直接在模型中定義第二級關聯。 現在您將可以隨時訪問這些數據。 它應該是這個樣子.....
var $belongsTo = array(
'Foo' => array(
'className' => 'Foo', //unique name of 1st level join (Model Name)
'foreignKey' => 'foo_id', //key to use for join
'conditions' => '',
'fields' => '',
'order' => ''
),
'Bar' => array(
'className' => 'Bar', //name of 2nd level join (Model Name)
'foreignKey' => false,
'conditions' => array(
'Bar.id = Foo.bar_id' //id of 2nd lvl table = associated column in 1st level join
),
'fields' => '',
'order' => ''
)
);
這種方法的問題在於,它可以使普通的查詢要複雜得多,他們需要的話。 因此,您也可以將第二級查詢直接添加到te find或paginate語句中,如下所示:(注意:我發現由於某些原因,您不能在第二級聯接中使用$ belongsTo關聯,並且需要重新定義它們,如果他們已經被定義。例如,如果「富」在$屬於關聯已經定義,你需要創建一個副本「Foo1」,使協會工作,如下面的例子。)
$options['joins'] = array(
array('table' => 'foos',
'alias' => 'Foo1',
'type' => 'inner',
'conditions' => array(
'CurrentModel.foo_id = Foo1.id'
)
),
array('table' => 'bars',
'alias' => 'Bar',
'type' => 'inner',
'foreignKey' => false,
'conditions' => array(
'Bar.id = Foo1.bar_id'
)
)
);
$options['conditions'] = array('Bar.column' => "value");
$this->paginate = $options;
$[modelname] = $this->paginate();
$this->set(compact('[modelname]'));
我希望這是明確的足以理解並幫助某人。
我看着調試輸出,你是對的,它不執行'JOIN'。這是不幸的,是否真的沒有其他方法讓CakePHP來做到這一點? – ash 2010-01-19 06:25:56
http://teknoid.wordpress.com/2008/07/17/forcing-an-sql-join-in-cakephp/ 從teknoid解決如何強制左連接解除hasMany並替換與臨時hasOne確實使用連接。閱讀它並讓我知道這是否適用於您,否則我可以發佈專門的連接代碼供您查看。 – 2010-01-19 15:32:16
確實,它確實有效。謝謝您的幫助! – ash 2010-01-20 00:06:16