テーブルを結合して、レコードを検索。ページネーションで表示する。

備忘録。

基本は以下を見る。

やりたいこと

投稿記事一覧に、記事を投稿した人の名前を表示させる。

画像3

投稿した人 = Usersテーブルのusernameカラム

usersテーブル

画像1

postsテーブル

画像2

手順

まず、PostsTableのinitializeメソッドに以下を追加。

PostsTable.php

class PostsTable extends AppTable
{
   public function initialize(array $config)
   {
       parent::initialize($config);
       
       $this->belongsTo('Users'); ←これを追加する。
   }

PostsControllerに、'contain' => ['Users']を追加。

PostsController.ctp

class PostsController extends AppController
{
   public $paginate = [
       'limit' => 6,
       'order' => ['created' => 'desc'],
       'contain' => ['Users'] // ←これを追加。
   ];

index.ctp

問題なければ、PostsテーブルにUsersテーブルがjoinされているはずなので、以下のコードでusernameが表示される。

<?php foreach ($posts as $post): ?>
   <tr>
   <td><?= $this->Number->format(h($post->id)) ?></td>
   <td><?= h($post->body) ?></td>
   <td><?= h($post->user_id) ?></td>
   
   <!-- postテーブルにusersテーブルをbelongして結合している。 -->
   <td><?= h($post->user->username) ?></td> ←これを追加。
   
   <td><?= h($post->created) ?></td>
   <td><?= h($post->modified) ?></td>

以上でindexに記事を投稿した人の名前が表示されるようになる。


この記事が気に入ったらサポートをしてみませんか?