2015-01-28 1 views
0

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

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

У кого-нибудь есть идея, как отключить beforeFind при сохранении/обновлении?

Спасибо!

PS: Я использую CakePHP 2.5.6.

ответ

0

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

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