初めまして。
現在会員登録システムの開発を進めておりますが、タイトルの件について分からないことがあります。
下記のテーブル構造・フォーム・コントローラーで、アソシエーションごとデータを新規保存しようと思っています。
table
1users - statuses を hasOne 2 └statuses - users へ belongsTo 3 ├basics - statuses へ belongsTo 4 └userdatas - statuses へ belongsTo
php
1# Users/form.ctp 2 3<?= $this->Form->create($entity); ?> 4 5<!-- Users 項目 --> 6 <?= $this->Form->control('username'); ?> 7 <?= $this->Form->control('password'); ?> 8 9<!-- Status 項目 --> 10 <?= $this->Form->hidden('Statuses.flg', ['value' => 1]); ?> 11 12<!-- Basics 項目 --> 13 <?= $this->Form->control('Statuses.Basics.address_first'); ?> 14 <?= $this->Form->control('Statuses.Basics.address_second'); ?> 15 16<!-- Userdatas 項目 --> 17 <?= $this->Form->hidden('Statuses.Userdatas.date_entry', ['value' => '2019-08-23'); ?> 18 19<?= $this->Form->submit('送信'); ?> 20<?= $this->Form->end(); ?> 21
php
1#UsersController.php - function form() 2 3$entity = $this->Users->newEntity(); 4 5 // POSTされたときの処理 6 if ($this->request->is('post')) 7 { 8 $entity = $this->Users->patchEntity( 9 $entity, 10 $this->request->getData(), 11 ['associated' => ['Statuses', 'Statuses.Basics', 'Statuses.Userdatas']] 12 ); 13 14 // データの中身を見るためにデバッグ 15 debug($entity); 16 17 $this->Users->save($entity); 18 } 19 20$this->set(compact(['entity']));
しかしながら、上記の形でフォームを送信しますと Statuses 以下のアソシエーションデータが patchEntity で反映されません。
途中に用意したデバッグ箇所で出力されるのは、
php
1# debug($entity) 2 3object(App\Model\Entity\User) { 4 5 'username' => 'hoge', 6 'password' => 'fuga', 7 '[new]' => true, 8 '[accessible]' => [ 9 'username' => true, 10 'password' => true, 11 ], 12 '[dirty]' => [ 13 'username' => true, 14 'password' => true, 15 'Statuses' => true // フィールドとして認識されている? 16 ], 17 '[original]' => [], 18 '[virtual]' => [], 19 '[errors]' => [], 20 '[invalid]' => [], 21 '[repository]' => 'Users' 22 23}
このような中身になっており、アソシエーション部分のデータはまるごと反映されておらず、不可解な部分も見受けられます。
原因にはどういったことが考えられますか?
また、この形でのフォームですとsave後のエンティティーからアソシエーション先のバリデートエラーも反映・表示されますでしょうか?
お力添えをお願いします。
なお、冗長になるかと思い Model/Table アソシエーションの記載や、POSTデータの中身は割愛いたしました。
そちらに原因が考えられそうな場合は追記・編集いたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/28 01:02