前提
class GoodsTable extends Table{ $this->hasMany('FStatesGoods', [ 'foreignKey' => 'good_id', ]); $this->hasMany('GoodsTags', [ 'foreignKey' => 'good_id', ]); } class FStatesTable extends Table{ $this->hasMany('FStatesGoods', [ 'foreignKey' => 'f_state_id', ]); } class FStatesGoodsTable extends Table{ $this->belongsTo('FStates', [ 'foreignKey' => 'f_state_id', ]); $this->belongsTo('Goods', [ 'foreignKey' => 'good_id', ]); } class TagsTable extends Table{ $this->hasMany('GoodsTags', [ 'foreignKey' => 'tag_id', ]); } class GoodsTagsTable extends Table{ $this->belongsTo('Goods', [ 'foreignKey' => 'good_id', 'joinType' => 'INNER', ]); $this->belongsTo('Tags', [ 'foreignKey' => 'tag_id', 'joinType' => 'INNER', ]); }
data = [id] => 30 [title] => 'kkkkkkkkk' [f_states_goods] => Array( [0] => Array( [id] => 1 [name] => 'aaaaaaa' ) [1] => Array ( [id] => 10 [name] => 'qqqqqqqqqq' ) ) [goods_tas] => Array( [0] => Array ( [name] => 1 ) [1] => Array ( [name] => 1 ) [2] => Array ( [name] => 1 ) )
class FoodsController extends AppController { public function edit($id = null) { $data = $this->request->getData(); $goods = TableRegistry::getTableLocator()->get('Goods'); $goo = $goods->get($id,['contain'=>["FStatesGoods","GoodsTags"]]); $goo = $goods->patchEntity($goo,$data,[ 'associated' => ["FStatesGoods","GoodsTags"] ]); } }
実現したいこと
上記の$dataを更新したいのですが、patchEntityすると以下のようになってしまいます。
[goods_tags]は全て新規追加
[f_states_goods]は変更なのですが、
id=10に関しては、good_id=20->30に変更してなおかつnameも変更したいデータですが
除外されてしまいます。
ちなみに、現在のControllerはFoodsですが、Goodsテーブルのカテゴリ毎に処理が変わるため
Controllerが別となっています。
Debug: App\Model\Entity\Good Object ( [id] => 30 [title] => kkkkkkkkk [goods_tags] => Array ( ) [f_states_goods] => Array ( [0] => App\Model\Entity\FStatesGood Object ( [id] => 1 [f_state_id] => 10 [good_id] => 30 [name] => 'aaaaaaa' [[new]] => [[accessible]] => Array ( [f_state_id] => 1 [good_id] => 1 [f_state] => 1 [good] => 1 ) ..... [[repository]] => FStatesGoods ) ) [[new]] => [[accessible]] => Array ( [name] => 1 [f_states] => 1 [tags] => 1 ) ..... [[repository]] => Goods )
試したこと
$goo = $goods->newEntity($data,[ 'associated' => ["FStatesGoods","GoodsTags"] ]); アソシエーション先は全てマージされませんでした。 $goo = $goods->patchEntity($goo,$data,[ 'checkExisting' => false, 'validate' => false, 'associated' => ["FStatesGoods","GoodsTags"] ]); リクエストデータを以下のように変更してみました data = [f_states_goods] => Array ( [0] => Array ( [id] => 1 [name] => 'aaaaaaa' ) [1] => Array ( [id] => 10 [name] => 'qqqqqqqqqq' ) [_ids] => Array ( [0] => 10 ) ) としてみたり data = [f_states_goods] => Array ( [_ids]=> [0] => Array ( [id] => 1 [name] => 'aaaaaaa' ) [1] => Array ( [id] => 10 [name] => 'qqqqqqqqqq' ) ) としてみたりしましたが、結果は変わりませんでした。
こちらをを見ながら、色々試してみたのですが、
何が原因で変更&追加分のデータが除外されてしまうのかが全くわかりませんでした。
ご教授のほどよろしくお願いいたします。
あなたの回答
tips
プレビュー