相关的模型条件被忽略

时间:2013-12-24 15:02:50

标签: cakephp cakephp-2.4

我有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关系中定义的条件?它也忽略了字段和顺序。

1 个答案:

答案 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');