我有2个模型:Option和Modifier,带有这样的选项belongsTo Modifier关系:
public $belongsTo = array(
'Modifier' => array(
'className' => 'Modifier',
'foreignKey' => 'modifier_id',
'conditions' => array('Modifier.type' => '3'),
'fields' => 'Modifier.name',
'order' => 'Modifier.name ASC'
)
);
在OptionsController中,我尝试获取修饰符列表:
$modifiers = $this->Option->Modifier->find('list');
CakePHP无条件地生成SQL,因此我获得了完整的Modifiers列表。为什么CakePHP 2.4.4忽略了模型belongsTo关系中定义的条件?它也忽略了字段和顺序。
答案 0 :(得分:2)
这是正确的行为
当你写:
$modifiers = $this->Option->Modifier->find('list');
您只是访问Modifier模型而不是所有与Option相关的修饰符。
实现你想要的你必须这样做:
$modifiers = $this->Option->Modifier->find(
'list',
array('conditions' => array('Modifier.type' => '3')
)
您还可以创建自己的查找类型(请参阅manual)
class Modifier extends AppModel {
public $findMethods = array('type3' => true);
protected function _findType3($state, $query, $results = array()) {
if ($state === 'before') {
$query['conditions']['Modifier.type'] = 3;
return $query;
}
return $results;
}
}
并在您的控制器中执行此操作
$modifiers = $this->Option->Modifier->find('type3');