2012-08-11 15 views
0

就此問題而言,這是關聯樹(全部爲->表示hasMany),所有數據庫結構代碼都遵循CakePHP約定。根據父級模型查找條件爲

Forum -> Section (forum_id) -> Topic (section_id) -> Reply (topic_id) 

我想運行一個查詢$this->Reply->find具備一定條件的,我想返回$data["Reply"]陣列只返回屬於他們的地方,以forum_id=X回覆。

例如,我運行某些條件$this->Reply->find(這並不重要),並返回兩種結果不同的家長,當你上去,直到你達到Forum.id(或Section.forum_id),它們的區別forum_id

我想要的是過濾結果,因此它們屬於某個forum_id。由於forum_id不是Reply模型本身的字段,而是Section(這是兩個「層」),因此我無法使用conditions條目來過濾結果。

我該怎麼辦?

+0

您將需要連接。查找查找調用上的選項參數的「連接」鍵。 – tigrang 2012-08-11 06:02:14

+0

也許你可以使用Containable和從上到下的查詢? – Dave 2012-08-11 06:07:39

+0

@Dave如果我用'Containable'運行一個'$ this-> Section-> find',它只能下到一個'Topic'的點。由於主題hasMany Reply,你無法到達'Reply'模型的數據,因此必須處理所有主題。 – 2012-08-11 06:08:59

回答

2

就算這樣簡單:

<?php 
$this->Reply->find('all', array(
    'joins' => array(
     Reply::joinLeft('Topic'), 
     Topic::joinLeft('Section'), 
     Section::joinLeft('Forum'), 
    ), 
    'conditions' => array('Forum.id' => $forumId), 
)); 

https://github.com/tigrang/EasyJoin - 這將決定模型之間的關係,併爲您創建的連接陣列。

如果您不想使用該插件,則必須手動指定連接數組或重新綁定模型以便能夠使用Containable,因爲它當前會創建多個查詢而不是聯接。

+0

這真的很酷,謝謝! – 2012-08-11 06:24:01

相關問題