0

我有 2 个模型: Option 和 Modifier 具有这样的 Option 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,因此我得到了完整的修饰符列表。为什么 CakePHP 2.4.4 忽略了在模型 belongsTo 关系中定义的条件?它还忽略字段和顺序。

4

1 回答 1

2

这是正确的行为

当你写:

$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');
于 2013-12-24T15:11:27.500 回答