使用Containable查找()使用深层关联的条件

时间:2011-11-10 15:14:54

标签: php cakephp cakephp-appmodel

我有以下三种模型ProductOrderOrderDetail

Product具有以下关联:

public $hasMany = array('OrderDetail');

Order具有以下关联:

public $hasMany = array('OrderDetail');

OrderDetail具有以下关联:

public $belongsTo = array('Order');
public $belongsTo = array('Product');

我正在使用Containable行为,想要find()产品。

如何在find()调用的条件部分中使用Order模型中的字段?

我的Product模型中有类似的内容:

$this->find('all', array('
    conditions' => array(
        'Order.order_date' => '2011-09-12'
    )
));

3 个答案:

答案 0 :(得分:0)

使用“包含”索引指定订单模型和相关条件。确保您使用产品模型上的可包含行为。

$this->find('all', array(
  'contain' => array(
    'Order' => array(
      'conditions' => array(
        'Order.order_date' => '2011-09-12'
      )
    )
  ),
));

此外,您可能希望查看模型关系。我想你可能在这个问题上指出了错误。

答案 1 :(得分:0)

首先将$ belongsTo数组合并到

public $belongsTo = array('Order', 'Product');

再试一次

答案 2 :(得分:0)

你不能用这种方式实现你想要的东西。如果您查看Cake的查询,您会看到原因。 Containable会执行多个查询,然后组装它们。

实现所需内容的最简单方法是从Order模型的角度执行查询,因为它是您要过滤的模型。如果这不是一个选项,请参阅:

See some ways to do it here