2

CakePHP では、unique のデフォルトが true に設定されています。念のためにコーディングしました。したがって、DB 構造は次のようになります: Item HABTM アクションで、unique が true に設定されています。

状況は次のとおりです。

ATLEAST 1 レコードが「生きている」ままである場合、1 つ以上のレコードを削除すると、保存時に削除が正常に機能します

すべてのレコード (または 1 つのレコードのみの場合) を削除すると、保存時に削除が機能しません。既存のすべてのレコードをそのように保持するだけです。

保存する直前に debug($this->request->data) を使用して、Nothing of Action が含まれていることを確認しました。

4

1 に答える 1

4

あなたの投稿のコメントでの議論から、私はまだ混乱していますが、私が理解しているのは、あなたがしようとしているということです: '3' ) 以下の場合:

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

POST には「アクション」キーが含まれている必要があります。

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

「Action」キーが設定されている場合、Cake はリレーションを「越え」なければならないことを認識し、魔法のようになります。すると削除されます。

開発中のアプリでこれをテストしたところ、実際にバグであることがわかりました。:D 問題は、特定の HATBM リレーションに対して手動で生成されたフォームを使用しなければならなかったため、何も含まれていない状態で投稿すると、リレーション キーが設定されず、レコードが削除されなかったことです。Form Helper がこれに対処していると思います。

同様の問題がある場合は、次の 2 つの方法で対処できます。

  1. JavaScript で非表示の入力を入れる

  2. コントローラーで「アクション」キーが設定されているかどうかを確認し、設定されていない場合は (空の配列として) 追加します。

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

    これはちょっと邪魔かもしれませんが、うまくいきます。

于 2012-05-09T07:48:05.883 に答える