私のアプリには、Burger
モデル、Joint
モデル、モデルがありLocation
ます。
ジョイントには多くのハンバーガーがあり、多くの場所があります。
私がやりたいのは、ハンバーガーを2つの方法でフィルタリングすることです。1つは評価に基づいて、もう1つは条件に一致する場所(この場合は都市)を持つジョイントに属しているかどうかに基づいています。
これが私が試したことですが、彼女は働き者ではありません:
$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);