あるコメントを投稿した「ユーザ」は一人で,あるユーザが投稿した「コメント」は多数あります.したがって,「ユーザとコメントは一対多」の関係です.このリレーションシップをモデルに設定して,コメントに投稿者名が表示できるようにします.なお,リレーションシップの詳細はこちらで確認してください.
「一対多」の多側である 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) が表示されました.
同様にコメントの一覧ページにも投稿者名を表示します.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>
一覧ページにも投稿者名が表示されました.