Laravel 10 入門トップページ


目次

  1. 全体の概要
  2. Laravel によるユーザ認証
  3. ユーザ認証を備えたコメント掲示板の開発
    1. 概要
    2. データベースのマイグレーション
    3. シーダによるコメントデータの登録
    4. モデルとコントローラの生成
    5. ルートの定義と確認
    6. 未検証ユーザの動作検証
    7. コメントの一覧表示
    8. ナビゲーションメニューの追加
    9. コメント一覧の Tailwind CSS によるスタイリング
    10. コメントの詳細ページ
    11. リレーションシップの設定と投稿者名の表示
    12. ページネーションの作成
    13. コメントの投稿
    14. コメントの編集
    15. コメントの削除
    16. ナビゲーションのハイライトを調整
  4. マルチ認証の実現

Laravel でユーザ認証とマルチ認証を実現する

ユーザ認証を備えたコメント掲示板の開発

リレーションシップの設定と投稿者名の表示

あるコメントを投稿した「ユーザ」は一人で,あるユーザが投稿した「コメント」は多数あります.したがって,「ユーザとコメントは一対多」の関係です.このリレーションシップをモデルに設定して,コメントに投稿者名が表示できるようにします.なお,リレーションシップの詳細はこちらで確認してください.

「一対多」の多側である Comment モデルから一側の User を取得する関数を作成します.

app/Models/Comment.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    use HasFactory;

    // One to Many の Many 側
    public function user()
    {
        return $this->belongsTo('App\Models\User');
    }
}

詳細表示のビューに投稿者を表示する要素を追加します.特に $comment->user->name とするだけでコメントの投稿者名を取得できることに注意してください.

resources/views/comments/show.blade.php(抜粋)
<div class="p-6 text-gray-900">
    <div class="my-2 border border-gray-300 rounded-md p-3">
        <div class="text-sm text-gray-700">Owner:</div>
        <div class="text-base text-gray-800 indent-4">{{ $comment->user->name }}</div>
        <div class="text-sm text-gray-700">Title:</div>
        <div class="text-lg font-semibold text-gray-800 indent-4">{{ $comment->title }}</div>
        <div class="text-sm text-gray-700">Body:</div>
        <div class="text-base text-gray-800 indent-4">{{ $comment->body }}</div>
        <div class="text-xs text-gray-600 pt-4">Created_at: {{ $comment->created_at }} / Updated_at: {{ $comment->updated_at }}</div>
    </div>
</div>

詳細表示に投稿者名 (Owner) が表示されました.

laravel10-2023-auth-71.png

同様にコメントの一覧ページにも投稿者名を表示します.Laravel では非常に簡単にリレーションシップを辿って情報を得ることが可能です.

resources/views/comments/index.blade.php(抜粋)
<div class="p-6 text-gray-900">
    @foreach ($comments as $comment)
        <div class="my-2 border border-gray-300 rounded-md p-3">
            <div class="text-sm text-gray-700">{{ $comment->user->name }}</div>
            <div class="font-semibold">
                <a href="{{ route('comments.show', $comment->id) }}" class="text-blue-500 hover:text-blue-800 hover:underline active:text-blue-900 active:bg-gray-200 transition ease-in-out duration-150">
                    {{ $comment->title }}
                </a>
            </div>
            <div class="text-sm text-gray-700">{{ $comment->body }}</div>
        </div>
    @endforeach
</div>

一覧ページにも投稿者名が表示されました.

laravel10-2023-auth-72.png

目次に戻る