CakePHPにてサイト製作中です。特定の投稿記事に対し、コメントを表示させる際の、データを表示させる際の記述方法がわからず、困っています。
▽環境▽
AWS Cloud9:無料枠
MySQL:ver5.7.26
CakePHP:ver3.8.2
PHP:ver7.2.19
src/Template/Ices/ranking.ctp
<?php <?php foreach ($ices as $ice): ?> <?= h($ice->ice_name) ?><br> //一部省略// <?php if ($ice->comments): ?> <p><?= h($ice->comments[0]->comment) ?></p> <p>BY<?= $this->Html->link( h($ice->comments[0]->user->nickname), ['controller' => 'Users', 'action' => 'view', $ice->comments[0]->user['id']]) ?></p> <?php else: ?> <p>コメントはまだありません。</p> <?php endif ?> <?php endforeach; ?> //一部省略//
■解決したいこと■
現在、上記ファイル内の、
▽以下、現在のModel、関連するControllerです。
CommentsTable
1 //一部省略 2class CommentsTable extends Table 3{ 4 public function initialize(array $config) { 5 parent::initialize($config); 6 //一部省略 7 8 $this->belongsTo('Ices', [ 9 'foreignKey' => 'ice_id', 10 'joinType' => 'INNER' 11 ]); 12 13 $this->belongsTo('Users', [ 14 'joinType' => 'INNER' 15 ]); 16 }
IcesTable
1<?php 2 //一部省略 3class IcesTable extends Table 4{ 5 public function initialize(array $config) 6 { 7 parent::initialize($config); 8 //一部省略 9 10 $this->belongsTo('Users', [ 11 'foreignKey' => 'user_id', 12 'joinType' => 'INNER' 13 ]); 14 $this->hasMany('Comments', [ 15 'foreignKey' => 'ice_id' 16 ]); 17 }
IcesController
1<?php 2namespace App\Controller; 3use App\Controller\AppController; 4class IcesController extends AppController 5{ 6 public function initialize() 7 { 8 parent::initialize(); 9 $this->Auth->allow(['index','view','search']); 10 $this->loadModel('Comments'); 11 $this->loadModel('Users'); 12 } 13 14 public function search() 15 { 16 $ices = $this->Ices->find('all'); 17 $manufacturer = isset($this->request->query['manufacturer']) ? $this->request->query['manufacturer'] : null; 18 $keyword = isset($this->request->query['keyword']) ? $this->request->query['keyword'] : null; 19 20 if($manufacturer){ 21 $where = ['Ices.manufacturer' => $manufacturer]; 22 23 if ($keyword) { 24 $where['OR']['Ices.ice_fraver LIKE'] = "%$keyword%"; 25 $where['OR']['Ices.simple_comment LIKE'] = "%$keyword%"; 26 } 27 28 $ices = $this->Ices->find('all'); 29 $ices->where($where) 30 31 ->contain(['Comments.Users','Users']) 32 ->all(); 33 //↑ここでドット記法でcontainし、ranking.ctpへ渡す 34 $this->set('manufacturer', $manufacturer); 35 $this->set('keyword', $keyword); 36 37 $this->set('ices', $this->paginate($ices)); 38 $this->render('ranking'); 39 } 40 } 41} 42
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/02 13:09