2012-03-26 1 views
0

У меня возникла проблема с методом $this->delete(), который удаляет запись из соответствующей модели. Раньше у меня был оператор, содержащийся в выражении if, который обнаруживал бы return false;, возвращающийся с delete(), а затем сбой.Ошибка метода меток CakePHP

Проблема в том, что она не срабатывает в течение 100% времени. Я прошел и дважды проверил отношения несколько раз, чтобы убедиться, что я позабочусь, и удалив все зависимости до удаления этой записи.

В настоящее время я удалил инструкцию из блока «if» и просто запустил ее независимо от того, что и работает без ошибок.

Если раньше я получал ложное сообщение, не должен ли я видеть какую-то ошибку?

Ex:

if ($this->customeDelete($id)) { 
    if ($this->ModelName->ModelName2->ModelName3->customDelete($id)) { 
     if ($this->ModelName4->deleteAll(array('foreign_id' => $id))) { 

      // Prior to this line, all deletes were successful. This is where it fails. 
      //The previous lines are custom model methods 

      if ($this->delete($id)) { // If statement that is failing 
       $this->commit(); 
       return true; 
      } 
     } 
    } 
} 
+1

Определяет ли ваша модель обратный вызов 'beforeDelete'? Вы видите инструкцию DELETE в трассировке SQL? – Joni

+0

Как выглядел ваш блок 'if'? – bfavaretto

+0

попробуйте с $ this-> Modelname-> delete ($ id); –

ответ

0

Похоже, что вы звоните $this->cutomDelete на записи, которую вы хотите удалить, а затем $this->delete на одной и той же записи. Если customDelete уже удалил данные, тогда удалить не удастся удалить и, следовательно, вернет false.

+0

Простите недоразумение. Это пользовательские функции удаления, которые предназначены для удаления связанных данных, а не окончательной конкретной записи. Я старался изо всех сил, чтобы сломать это, но из-за моей работы я не могу отображать реальные имена функций и данные. – Chris

+0

Не видя customDelete, это немного сложно ... Чувство моего чувства заключается в том, что запись удаляется там. Попробуйте посмотреть, какие запросы выполняются при отладке, или поочередно попробуйте '$ this-> id = $ id; debug ($ this-> read()); ' Если он возвращает пустой массив, вы точно знаете, что он удаляется ранее в вашем скрипте. Возможно, вы вызываете удаление, не устанавливая для каскада значение false. http://book.cakephp.org/1.3/ru/view/1036/delete –

+0

Вы очень проницательны. Спасибо. Да, очевидно, человек, который закодировал предыдущие методы удаления, не передавал ложный каскад. – Chris

Смежные вопросы