cakephp - 在 CakePHP 中使用关联条件进行过滤

标签 cakephp associations

在我的应用中,我有一个 Burger 模型、一个 Joint 模型和一个 Location 模型。

关节有很多汉堡,并且有很多位置。

我想要做的是通过两种方式过滤汉堡:基于评级,还基于它们是否属于具有与条件(在本例中为城市)匹配的位置的关节。

这是我尝试过的,但她不工作:

$burgers = $this->Burger->find('all', array(
    'conditions' => array('Burger.official_rating !=' => 0),
    'contain' => array(
        'Joint',
            'Joint.Location.conditions' => array(
                'Location.city' => 'Toronto'
            )
    ),
    'order' => array('Burger.official_rating DESC'),
    'limit' => 10
));

Joint.Location.conditions 似乎没有效果。

编辑:现在使用联接,但不确定这是否是最有效的方法(注意,我必须添加一个 Contain 子句,以确保在结果中返回关联的数据)。

$options['joins'] = array(
    array('table' => 'joints',
        'alias' => 'Joint1',
        'type' => 'inner',
        'conditions' => array(
            'Joint1.id = Burger.joint_id'
        )
    ),
    array('table' => 'locations',
        'alias' => 'Location2',
        'type' => 'inner',
        'conditions' => array(
            'Location2.joint_id = Burger.joint_id'
        )
    )
);

$options['conditions'] = array(
    'Location2.city' => 'Toronto',
    'Burger.official_rating !=' => 0
);

$options['order'] = array(
    'Burger.official_rating DESC',
);

$options['limit'] = 10;

$options['contain'] = array(
    'Joint','Joint.Location'
);

$burgers = $this->Burger->find('all', $options);

最佳答案

问题:

这是人们遇到的一个非常常见的问题,但是一旦您了解您不能根据其所包含项目的条件来限制主要查找模型,就可以轻松解决。

不能的原因是因为执行包含操作实际上会在表上创建单独的查询,这与 JOIN 不同,JOIN 会创建单个查询。

解决方案:

在这种情况下,最好的选择是使用 CakePHP JOINs .

在某些情况下(不是您的情况),使用 JOIN 的替代方法是更改​​您正在执行查询的模型。如果您只需要一个条件,那么您可以将查找更改为具有该条件的模型,而不是包含在包含中的模型,并以相反的顺序包含。

关于cakephp - 在 CakePHP 中使用关联条件进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14926575/

相关文章:

php - mysql如何在cakephp中查询不同controller的不同表

ruby-on-rails - Rails 按关联模型的属性收集订单?

ruby-on-rails - 使用 accepts_nested_attributes_for 时获取父级

php - 第 216 行的 fatal error : Call to a member function close() on a non-object in webroot_path/cakeapp/lib/Cake/Cache/Engine/RedisEngine. php

php - CakePHP 应该将 number_format(与 View 相关的逻辑)放在哪里?

ruby-on-rails - Rails JOIN 模型依赖销毁

ruby-on-rails - Rails属于

ruby-on-rails - 多个:many through relationship如何使用create方法

cakephp 从另一个助手中访问助手

php - 由一个相关表填充多个下拉菜单 CakePHP 3