2012-05-07 8 views
2

CakePHPのデフォルト値はtrueに設定されています。 私は次のDB構造を持っています: 項目HABTMアクション、一意にtrueを設定します。Cakephp - HABTMレコードは、一意のセットがtrueに設定されても削除されません。

削除は、私は1つのまたは複数のレコードを削除すると、少なくとも1レコード滞在「生きている」

削除は時に動作しない場合、私はすべて削除すると、保存、保存時に正常に動作します:

状況が続いていますレコード(またはそれが唯一のレコードの場合は1レコード)。それは単に既存のすべてのレコードをそのまま維持します。

Nothing of Actionを保存する直前にdebug($ this-> request-> data)で確認しました。 このような形式でPOSTを保存します:私はまだ混乱していますが、私は理解することは、あなたがしようとしているということであるあなたのコメント欄での議論から

+0

アクションHABTMアイテムはありますか?あなたはどこから削除していますか?あなたは、保存操作(アクションのためのポストに何もない)またはModel :: delete()、Model :: deleteAll()で削除しようとしていますか? –

+0

はい、どちらのモデルでも、私はHABTMの関係を 'unique'でtrueに設定しています。私は確かに、アクションのためのポストでは何も保存操作で削除しようとします。だから私はそれを理解していない、アクションのためのポストでは何もない、それはそうではないはずの記録を維持する。 – pbond

+2

私の提案は、HABTMの関係を掘り下げ、「たくさんの関係を持っている」ということです。 – Wylie

答えて

4

配列( 「アイテム」=>配列( 'ID' => '3' ) 付:

$this->Item->SaveAll($this->request->data); 

あなたのPOSTが 'アクション' キーが含まれている必要があります。

array(
    'Item' => array(
     'id' => '3' 
    ), 
    'Action' => array(
     'Action' => array() 
    ) 

とき番目e「アクション」キーが設定されていると、ケーキはそれが関係を「上回らなければならない」ことを知っています。 それが削除されます。

私は開発中のアプリケーションでこれをテストしましたが、実際にはバグであることがわかりました。 :D問題 は、特定のHATBM関係のために手動で生成されたフォームを使用しなければならなかったので、何も含めないで転記するときにはリレーションキーは設定されず、レコードも削除されませんでした。フォームヘルパーがこれを扱っていると思います。

あなたは二つの異なる方法でこれを管理することができ、同様の問題を持っている場合:「アクション」キーが設定されている場合

  1. は、コントローラのチェックでは

  2. JavaScriptを

    に隠し入力を入れ、追加しない場合は、空の配列として追加します。

    $ this-> request-> data ['Action'] ['Action'] = array();

    これは邪魔になるかもしれないが、それは仕事をするだろう。

+0

ありがとう!これは機能します。保存する前に 'if(empty($ this-> request-> data ['modelname']))'チェックをコントローラに追加し、空の配列を提案通り追加しました。私はHTMLフォームヘルパーbtwを使用しています。 – pbond

+0

フォームヘルパーを使用している場合、これはバグやimpovemntかもしれないので、あなたはそれを報告することを考慮する必要があります:http://cakephp.lighthouseapp.com/ –

関連する問題