質問: $DalcheckboxTable15s->saveMany($entities); ``` ##### テーブル構成 ■datacklists(マスタ) | id | dal01 | dal02 | | --- | --- | --- | | 1 | テキスト | テキスト | | 2 | テキスト | テキスト | | 3 | テキスト | テキスト | ■dalcheckbox15s | id | datacklists_id | dal15_id | | --- | --- | --- | | 1 | 3 | 1 | | 2 | 10 | 1 | | 4 | 10 | 2 | | 7 | 10 | 3 | | 9 | 11 | 7 | ■daldata15s | id | name | | --- | --- | | 1 | テキスト | | 2 | テキスト | | 3 | テキスト | ###### 説明 現状、全てテーブルdalcheckbox15sにインサートされてしまいます。 そうではなく、datacklists_idにを参照してある場合は更新、ない場合は新規追加としたいのですが 実現の方法がわかりません。。 一旦、deleteAllで編集するdatacklists_idの投稿をdalcheckbox15sから全て削除してから 新たにインサートする方法で実現できたのですが、不恰好かと思い、、、 よろしくお願いいたします。
回答: dalcheckbox15sのPKをidではなく、datacklists_idとdal15_idの複合キーにすれば、deleteAllしなくても済むかもしれません。 ただし、以前は存在していたけど、新しいデータには存在していない(削除された)パターンでは、削除されずに残ってしまうので、やっぱり事前にdeleteAllする必要があると思います。 なお、アソシエーションを使ってデータを取得・編集・保存をした場合、自動的に関連データの置き換えを行うことができます。(saveStrategy=replace) 詳しくはマニュアル「BelongsToMany アソシエーションの保存」に記載されていますので、参照してください。