忽略关联的模型条件



我有 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');

最新更新