假设我有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列表中。
  3. 因此,我最终在我的应用程序中出现SQL错误,因为我的 conditions 数组包含对Country.code的引用,而Cake构建的第二个查询不会加入国家。

    我看到的最佳Cake解决方案是构建子查询,如复杂查找条件”部分手册。然而,这看起来非常复杂,而且比我想实现的更糟糕。我有一种更容易忽视的方式吗?

其他提示

将条件也包含在包含中。 E.g:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top