発生している問題
CakePHP3でWEBサービスを作っています。
関連する二つのテーブルデータ2つをcontainで取得したのですが、viewでの表示がやりたいように出来ません。
具体的には、Questionsテーブルに関連するAnswersテーブルとCommentsテーブル(CommentsテーブルはAnswersテーブルにも関連しています)を取得して、あるQuestionに対して、Answer、Comment、Answer、Commentという順番で表示したいのですが、方法がわかりません。
該当のソースコード
モデルで下記のように3つのテーブルを関連付けています。
QuestionsTable.php
$this->hasMany('Answers', [ 'foreignKey' => 'question_id' ]); $this->hasMany('Comments', [ 'foreignKey' => 'question_id' ]);
AnswersTable.php
$this->belongsTo('Questions', [ 'foreignKey' => 'question_id', 'joinType' => 'INNER' ]); $this->hasMany('Comments', [ 'foreignKey' => 'answer_id' ]);
CommentsTable.php
$this->belongsTo('Questions', [ 'foreignKey' => 'question_id', 'joinType' => 'INNER' ]); $this->belongsTo('Answers', [ 'foreignKey' => 'answer_id', 'joinType' => 'INNER' ]);
QuestionsControllerでは、containでAnswersテーブルとCommentsテーブルのデータを取得しています。
public function view($id = null) { $question = $this->Questions->get($id, [ 'contain' => ['Answers', 'Comments'] ]); $this->set('question', $question); }
この状況でQuestionsのview.ctpからQuestionのidに関連するAnswersとCommentsのデータをAnswer、次にそのAnswerと関連するComment、Answer、Comment…という順番で表示させようとしているのですが、どう書けばいいのかわかりません。
foreachで、以下のように書けば関連するAnswerをすべて表示させることはできますが、やりたいこととは違います。
<?php foreach ($question->answers as $answers): ?> <tr> <td><?= h($answers->name) ?></td> <td><?= h($answers->comment) ?></td> </tr> <?php endforeach; ?>
初歩的な質問かもしれませんが、教えていただけると助かります。
よろしくお願いいたします。
環境情報
DB:MariaDB 10.1.36
あなたの回答
tips
プレビュー