У меня есть модель для некоторых продуктов в 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 не вызывает обратные вызовы find, только сохраняет обратные вызовы (beforeSave, afterSave).
Изменить. Проблема также может быть ошибками проверки, которые вы, похоже, не проверяете, если на модели установлены правила проверки.