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