2
在我的應用程序中,我有一個Burger
模型,一個Joint
模型和一個Location
模型。在CakePHP中使用關聯關聯條件進行過濾
關節有許多漢堡,並有許多地點。
我想要做的是過濾漢堡兩種方式:基於評級,也取決於它們是否屬於具有與條件相匹配的位置的聯合,在此情況下爲城市。
下面是我嘗試過,但她沒有workey:
$burgers = $this->Burger->find('all', array(
'conditions' => array('Burger.official_rating !=' => 0),
'contain' => array(
'Joint',
'Joint.Location.conditions' => array(
'Location.city' => 'Toronto'
)
),
'order' => array('Burger.official_rating DESC'),
'limit' => 10
));
Joint.Location.conditions
似乎沒有任何效果。
編輯:現在使用連接,但我不確定這是否是最有效的方式(請注意,我必須添加一個Contain子句,以確保關聯數據已返回到結果中)。
$options['joins'] = array(
array('table' => 'joints',
'alias' => 'Joint1',
'type' => 'inner',
'conditions' => array(
'Joint1.id = Burger.joint_id'
)
),
array('table' => 'locations',
'alias' => 'Location2',
'type' => 'inner',
'conditions' => array(
'Location2.joint_id = Burger.joint_id'
)
)
);
$options['conditions'] = array(
'Location2.city' => 'Toronto',
'Burger.official_rating !=' => 0
);
$options['order'] = array(
'Burger.official_rating DESC',
);
$options['limit'] = 10;
$options['contain'] = array(
'Joint','Joint.Location'
);
$burgers = $this->Burger->find('all', $options);
你的答案幫助!我在問題中添加了我的解決方案。它正在工作,但我不確定的一件事是我是否需要「包含」來實際將數據包含在結果中。 – 2013-02-18 00:44:05
@BenjaminAllison - 你根本不應該使用包含 - 只需指定從不同模型'fields'=> array(...')所需的字段,它將返回你想要的數據 – Dave 2013-02-18 03:39:09
但是當然!非常感謝。 – 2013-02-18 05:48:01