深层联想的CakePHP条件

深层联想的CakePHP条件,cakephp,associations,conditional-statements,containable,Cakephp,Associations,Conditional Statements,Containable,我使用containable有一些深层次的关联,需要过滤回结果。对于这个问题,假设我们正在销售汽车,并希望通过功能缩小结果范围 汽车有许多品牌有许多型号HABTM功能 $options = array( 'order' => array('Car.price'), 'contain' => array( 'make', 'model' => array( 'order' => 'Model.name

我使用containable有一些深层次的关联,需要过滤回结果。对于这个问题,假设我们正在销售汽车,并希望通过功能缩小结果范围

汽车有许多品牌有许多型号HABTM功能

$options = array( 
    'order' => array('Car.price'),
    'contain' => array(
        'make',
        'model' => array(
            'order' => 'Model.name ASC'
        ),
        'features'
    )
);
$cars = $this->Car->find('all', $options);

如何排除所有没有电动车窗(Features.name!=电动车窗)的车辆。

Containable
仅适用于您指定在获取数据时要包括的车型,但不限制父车型获取数据。一个明显的症状是,有时您的父数据可能包含一些
null
数据

因此,为了实现它,我认为我们应该在这里使用
连接
,以便您可以指定条件:

$options = array(
    'order' => array('Car.price'),
    'contain' => array(
         'make',
         'model' => array(
             'order' => 'Model.name ASC'
         ),
         'features'
    ),
    'joins' => array(
         array(
             'table' => 'features',
             'alias' => 'Feature',
             'type' => 'LEFT',
             'conditions' => array(
                 'Car.id = Feature.car_id'
             )
         )
     ),
     'conditions' => array(
          'Features.name !=' => 'power_windows',
     )
);

但这样做的一个缺点是,您可能因为加入而复制了
汽车。这是另一个问题;)

谢谢,莱昂内尔,我不知道你能同时使用这两个。。。这打开了许多可能性!