CakePHP条件用于深层关联

时间:2013-09-26 01:21:10

标签: cakephp associations conditional-statements containable

我有一些使用可包含的深层关联,需要过滤掉结果。为了这个问题,让我们说我们正在销售汽车,并希望通过功能缩小结果。

Car hasmany make hasmany model 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!= power_windows)。

1 个答案:

答案 0 :(得分:3)

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

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

$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',
     )
);

但这样做的一个缺点是,由于加入,您可能会重复Car。这是一个单独的问题;)