我有 2 个模型: 选项和修饰符与这样的选项属于修饰符关系:
public $belongsTo = array(
'Modifier' => array(
'className' => 'Modifier',
'foreignKey' => 'modifier_id',
'conditions' => array('Modifier.type' => '3'),
'fields' => 'Modifier.name',
'order' => 'Modifier.name ASC'
)
);
在选项控制器中,我尝试获取修饰符列表:
$modifiers = $this->Option->Modifier->find('list');
CakePHP无条件地生成SQL,所以我得到了完整的修饰符列表。为什么 CakePHP 2.4.4 忽略了模型中定义的条件属于关系?它还忽略字段和顺序。
这是
正确的行为
当你写:
$modifiers = $this->Option->Modifier->find('list');
您只是访问修饰符模型,而不是与选项相关的所有修饰符。
要实现您想要的,您必须这样做:
$modifiers = $this->Option->Modifier->find(
'list',
array('conditions' => array('Modifier.type' => '3')
)
您还可以创建自己的查找类型(请参阅手册)
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');