【发布时间】:2009-10-27 18:45:09
【问题描述】:
假设我有 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 解决方案是构建一个子查询,如手册的Complex Find Conditions 部分所述。然而,这似乎很复杂,而且比我想实现的更像是一种黑客攻击。有没有我忽略的更简单的方法?
【问题讨论】:
标签: php sql cakephp join left-join