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

У меня есть модель для некоторых продуктов в 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.

0

Решение

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector