假设我有 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 个查询:
- 首先,它正在选择代码为“US”的所有国家/地区的 ID。
- 然后它使用这些 ID 来选择所有用户加入区域,这些用户位于
region.country_id
之前检索到的国家 ID 列表中。
结果,我的应用程序中出现了 SQL 错误,因为我的conditions
数组包含对 Country.code 的引用,并且 Cake 构建的第二个查询没有加入国家/地区。
我看到的最好的 Cake 解决方案是构建一个子查询,如手册的复杂查找条件部分中所述。然而,这似乎很复杂,而且比我想实现的更像是一种黑客攻击。有没有更简单的方法可以让我忽略?