質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

0回答

278閲覧

アソシエーションの保存について

退会済みユーザー

退会済みユーザー

総合スコア0

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/11/17 14:44

前提・実現したいこと

お世話になります。
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問