CakePHP beforeFind () прекращает сохранение

0

У меня есть модель для некоторых продуктов в CakePHP, и по умолчанию мне нужно вернуть только продукты с количеством> 0 для каждого find(). Поэтому я реализовал это в 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, я устанавливаю 'callbacks' => false для find(). Проблема. Когда я пытаюсь обновить продукт с количеством 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.

Теги:
cakephp
cakephp-2.5

1 ответ

0

Проблема заключается в том, что вы используете $this->Medium->id = $id, что делает внутреннюю находку в $ id. Вместо этого попробуйте использовать $this->request->data['Medium']['id'] = $id. Model :: save не вызывает обратные вызовы find, только сохраняет обратные вызовы (beforeSave, afterSave).

Изменить. Проблема также может быть ошибками проверки, которые вы, похоже, не проверяете, если на модели установлены правила проверки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню