2012-03-26 13 views
0

対応するモデルからレコードを削除する$this->delete()メソッドの問題が発生しました。以前はdelete()から戻ってきたreturn false;を検出して失敗するifステートメントに文が含まれていました。CakePHP delete()モデルメソッドが失敗しました

問題は100%時間がかかることです。私はこのレコードを削除する前に、私が世話をしていることを確認し、すべての依存関係を削除していることを確認するために、関係をかなり調べました。

現在、私は "if"ブロックからステートメントを削除し、何も問題なく実行してエラーなしで動作させました。

私が前に返された偽を取得していた場合、何らかのエラーが表示されるべきではありませんか?

例:

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'コールバックを定義していますか? SQLトレースにDELETE文がありますか? – Joni

+0

'if'ブロックはどのように見えましたか? – bfavaretto

+0

$ this-> Modelname-> delete($ id)で試してください。 –

答えて

0

あなたが同じレコードに削除したいレコードで$this->cutomDeleteを呼び出し、その後、$this->deleteのように見えます。 customDeleteが既にデータを削除している場合、deleteは削除するものがないため、falseを返します。

+0

誤解を許してください。これは、最終的な特定のレコードではなく、関連するデータを削除するためのカスタム削除機能です。私はこれを打ち破るために最善を尽くしましたが、仕事のために実際の関数名とデータを表示することができません。 – Chris

+0

customDeleteを見ることなく、これはちょっと難しいです...私の直感は、レコードがそこで削除されているということです。デバッグでクエリが実行されている順番を調べてみるか、代わりに '$ this-> id = $ id;を試してみてください。 debug($ this-> read()); ' 空の配列を返す場合は、スクリプトの前に削除されていることがわかります。カスケードをfalseに設定せずにdeleteを呼び出している可能性があります。 http://book.cakephp.org/1.3/ja/view/1036/delete –

+0

あなたは非常に洞察力があります。ありがとうございました。はい、明らかに、以前の削除メソッドをコード化した人はカスケードにfalseを渡していませんでした。 – Chris

関連する問題