我在CakePHP中有一些产品的型号,默认情况下我只需要返回数量>的产品。每个find()都为0。所以我在beforeFind中实现了这个:
public function beforeFind($query) {
// As default, search only media with a quantity > 0
if (!isset($query['conditions']['Medium.quantity'])) {
$query['conditions']['Medium.quantity >'] = 0;
}
return $query;
}
每当我需要显示数量= 0的产品时,我设置回调' => find()为false。 问题:当我尝试将数量为0的产品更新到更高的数量时,它不起作用。不知何故,在保存之前调用beforeFind(),当我将它注释掉时,它运行正常。
编辑产品的代码:
if ($this->request->is(['post','put'])) {
$this->Medium->id = $id;
if ($this->Medium->save($this->request->data, array('callbacks' => false))) {
$this->Session->setFlash(__('The medium has been updated.'));
return $this->redirect(['action' => 'view', $id]);
}
$this->Session->setFlash(__('Unable to update the medium.'));
}
正如您所看到的,我尝试将回调设置为false以进行保存,但它无法正常工作。
有人知道如何在保存/更新时禁用beforeFind吗?
谢谢!
PS:我正在使用CakePHP 2.5.6。
答案 0 :(得分:0)
问题实际上是您使用$this->Medium->id = $id
,它在$ id上执行内部查找。相反,请尝试使用$this->request->data['Medium']['id'] = $id
。 Model :: save不会调用find回调,只保存回调(beforeSave,afterSave)。
编辑:如果您在模型上设置了验证规则,问题也可能是验证错误,您似乎没有检查这些错误。