使用beforeFind(),如果希望find使用它,则应返回已修改的$queryData数组.这是你目前的问题.
public function beforeFind($queryData) {
parent::beforeFind();
$queryData['conditions'] = array('client_id' => 2);
return $queryData;
}
但是,您还有其他一些小问题可能会导致您遇到问题.
>您不应该在beforeFind()中直接设置条件,而是添加条件.如果你打电话给有条件的发现怎么办?考虑一下:
$this->MyModel->find('first', array(
'conditions' => array(
'MyModel.active' => 1
)
));
您希望find使用该条件,但也希望您的beforeFind()使用您的beforeFind()自动仅返回client_id = 2的结果.不幸的是,在你的beforeFind()中有这一行:
$queryData['conditions'] = array('client_id' => 2);
您刚刚完全覆盖了条件数组,并且丢失了MyModel.active = 1的其他条件.
>您还应确保说明条件中的字段属于哪个模型.这是一个很好的做法,如果你有两个模型有一个名为client_id的字段,那么将来会证明你的代码.您可以使用$this->别名来获取当前模型的别名,如果您为模型使用了不同的别名,这也将允许您的代码工作.
所以你的最终代码应该是:
public function beforeFind($queryData) {
parent::beforeFind();
$queryData['conditions'][$this->alias . '.client_id'] = 2;
return $queryData;
}