假设我有3个模型:用户,地区,国家。
User belongsTo Region
Region belongsTo Country
这些模型中的每一个都使用Containable行为。我正在尝试使用代码“US”查找来自该国家/地区的用户。这是我正在尝试的:
$users = $this->User->find('all', array(
'conditions' => array('Country.code' => 'US'),
'contain' => array('Region.Country'),
));
CakePHP将此分为2个查询:
region.country_id
所在国家/地区ID列表中的区域。因此,我最终在我的应用程序中出现SQL错误,因为我的conditions
数组包含对Country.code的引用,而Cake构建的第二个查询不会加入国家。
我看到的最好的Cake解决方案是构建一个子查询,如手册的Complex Find Conditions部分所述。然而,这看起来非常复杂,而且比我想实现的更糟糕。我有一种更容易忽视的方式吗?
答案 0 :(得分:2)
Nate Abele(CakePHP的前任负责人)写了一篇关于做ad hoc joins的文章可能有所帮助。
答案 1 :(得分:1)
将条件也包含在包含中。 E.g:
$users = $this->User->find('all', array('contain' => array(
'Region' => array(
'Country' => array(
'conditions' => array('Country.code' => 'US'),
),
),
)));
中的倒数第二个示例