CakePHP beforeFind()停止保存

时间:2015-01-28 12:05:22

标签: php cakephp cakephp-2.5

我在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。

1 个答案:

答案 0 :(得分:0)

问题实际上是您使用$this->Medium->id = $id,它在$ id上执行内部查找。相反,请尝试使用$this->request->data['Medium']['id'] = $id。 Model :: save不会调用find回调,只保存回调(beforeSave,afterSave)。

编辑:如果您在模型上设置了验证规则,问题也可能是验证错误,您似乎没有检查这些错误。