0

假设我有 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 个查询:

  1. 首先,它正在选择代码为“US”的所有国家/地区的 ID。
  2. 然后它使用这些 ID 来选择所有用户加入区域,这些用户位于region.country_id之前检索到的国家 ID 列表中。

结果,我的应用程序中出现了 SQL 错误,因为我的conditions数组包含对 Country.code 的引用,并且 Cake 构建的第二个查询没有加入国家/地区。

我看到的最好的 Cake 解决方案是构建一个子查询,如手册的复杂查找条件部分中所述。然而,这似乎很复杂,而且比我想实现的更像是一种黑客攻击。有没有更简单的方法可以让我忽略?

4

2 回答 2

2

Nate Abele(CakePHP 的前首席开发人员)写了一篇关于进行临时连接的文章,这可能会有所帮助。

于 2009-10-27T21:52:21.697 回答
1

将条件也放入容器中。例如:

$users = $this->User->find('all', array('contain' => array(
    'Region' => array(
        'Country' => array(
            'conditions' => array('Country.code' => 'US'),
        ),
    ),
)));

请参阅Containable 手册中的倒数第二个示例

于 2009-10-29T12:21:38.453 回答