2011-11-14 14 views
0

私は誰かがこれを手助けできることを願っています。私は教義モデルに助言としてカスケード削除を使用しようとしていますAとB:私は、1対5月の関係にある2つのテーブルを持っているZend - Doctrine delete cascade

してください。

$this->hasMany('Tcc_Model_B', array(
      'local' => 'A_ID', 
      'foreign' => 'B_ID', 
      'cascade' => 'delete' 
       ) 
      ); 

Tcc_Model_Aの主キーが正しく削除されていても、外部キー(B_IDs:私は私のモデルは、私はこれを持って

$q = Doctrine_Query::create() 
     ->delete('Tcc_Model_A i') 
     ->whereIn('i.A_ID', $input->ids); 
    $result = $q->execute(); 

:私のコントローラのIDで基本的に

は、これを行います)はそうではありません。誰かが私が間違っていることを知っていますか?少しでも助けてくれてありがとうございました。 F.

答えて

2

アプリケーションコードにカスケード操作を強制しないでください。これらの操作は、アプリケーションコードによって原子的に実行することはできません。

データベースにFOREIGN KEY...ON DELETE CASCADEという制約を宣言することで、カスケード演算を実装します。それらはRDBMSによって処理されなければなりません。あなたのコメントを再


外部キーは、更新および削除をカスケード接続するためのサポートを提供することができ、そして親と従属表の両方への変更が一緒に起こるように、彼らはアトミックに機能します。

ALTER TABLE Tcc_Model_B ADD FOREIGN KEY (B_ID) 
    REFERENCES Tcc_Model_A(A_ID) 
    ON DELETE CASCADE; 

してDoctrine 2を使用する場合はhttp://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

+0

入力していただきありがとうございます。もっと具体的にお願いしてもいいですか?私は、あなたがアドバイスする方法を誰が実装するのかはわかりません。私はMysqlを使用していると思います。 – FFSS

0

を参照してください、のサポートはonDelete = "カスケード"オプションで@JoinColumnを設定することで、DELETE CASCADE ONがあります。

+0

ありがとうございました。私はMySQLのカスケードを使用してそれを並べ替えます。 – FFSS

関連する問題