我有一些使用可包含的深层关联,需要过滤掉结果。为了这个问题,让我们说我们正在销售汽车,并希望通过功能缩小结果。
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)。
答案 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
。这是一个单独的问题;)