前提・実現したいこと
お世話になります。
cakephp3でアソシエーションの保存について勉強しているのですが、
以下の場合どのようにして保存すればいいかが分からなくなってしまったため
質問をさせていただきます。
★解決したい問題
1つの報告書に対し、複数の報告者が存在可能。その報告者には、1つのファイルを持たせることができる。
画面としては、
報告書を作成する画面で、報告者が報告内容を書き込めるようになっています。
その報告内容には1つのファイルを添付することができます。
アソシエーションの保存で、
報告書テーブルと、報告者テーブルは保存できたのですが、
ファイルテーブルに保存をすることができませんでした。
どうすれば保存ができるでしょうか。
ご教授願います。
■テーブル情報
・reports 報告書テーブル
id
title タイトル
・reporters 報告者テーブル
id
report_id 報告書テーブルの外部キー
file_id ファイルテーブルの外部キー
body 報告内容
・files ファイルテーブル
id
file ファイル
該当のソースコード
cakephp3
1 モデル(table)情報 2 //報告書テーブルのモデル (table) 3 public function initialize(array $config) 4 { 5 parent::initialize($config); 6 7 $this->setTable('reports'); 8 $this->setDisplayField('title'); 9 $this->setPrimaryKey('id'); 10 11 $this->addBehavior('Timestamp'); 12 $this->hasMany('Reporters',[ 13 'foreignKey'=>'report_id' 14 ]); 15 } 16------------------------------------------------------- 17 //報告者テーブルのモデル (table) 18 public function initialize(array $config) 19 { 20 parent::initialize($config); 21 22 $this->setTable('reporters'); 23 $this->setDisplayField('id'); 24 $this->setPrimaryKey('id'); 25 26 $this->belongsTo('Reports', [ 27 'foreignKey' => '_id', 28 'joinType' => 'INNER' 29 ]); 30 $this->belongsTo('Files', [ 31 'foreignKey' => 'file_id', 32 'joinType' => 'INNER' 33 ]); 34 } 35------------------------------------------------------ 36//報告者テーブルのモデル (table) 37 public function initialize(array $config) 38 { 39 parent::initialize($config); 40 41 $this->setTable('files'); 42 $this->setDisplayField('id'); 43 $this->setPrimaryKey('id'); 44 45 $this->hasMany('Reporters', [ 46 'foreignKey' => 'file_id' 47 ]); 48 }
cakephp3
1 2//ReportsController 3 4/*報告書登録*/ 5public function add(){ 6 $report = $this->Reports->newEntity(); 7 $report = $this->Reports->patchEntity($article, $this->request->getData(),[ 8 'associated' => ['Reporters.Files'] 9 ]); 10 $this->Reports->save($report) 11 //以下省略 12} 13
cakephp3
1 //報告書作成画面 2 <?= $this->Form->create($report) ?> 3 <fieldset> 4 <?php 5 echo $this->Form->control('title');//タイトル 6 echo $this->Form->control('reporter.0.body');//報告内容 7 echo $this->Form->control('file.0.file');//ファイル 8 ?> 9 </fieldset> 10 <?= $this->Form->button(__('Submit')) ?> 11 <?= $this->Form->end() ?> 12
補足情報(FW/ツールのバージョンなど)
cakephp3.6
あなたの回答
tips
プレビュー