【问题标题】:Building conditional statement across multiple models (CakePHP 1.2.5)跨多个模型构建条件语句 (CakePHP 1.2.5)
【发布时间】: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 个查询:

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

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

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

【问题讨论】:

    标签: php sql cakephp join left-join


    【解决方案1】:

    Nate Abele(CakePHP 的前首席开发人员)写了一篇关于做 ad hoc joins 的文章,这可能会有所帮助。

    【讨论】:

    • 酷,我很快就会尝试这个...没有意识到“条件”数组键(其中包括“字段”和“组”)可以在包含数组中传递.如果可行,我会打勾。 :)
    【解决方案2】:

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

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

    请参阅the Containable manual 中的倒数第二个示例

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多