たとえば以下のようなケースで使えるサンプルコードです。
- $post->commentsで、その投稿についているコメントを取得する。 さらに、その中に自分(ログインユーザー)のコメントがあるかどうか判定したい
- $product->reviewsで、その商品についているレビューを取得する。 さらに、その中に自分(ログインユーザー)のレビューがあるかどうか判定したい
Modelのリレーション定義
投稿(post)とコメント(comment)を例にします。
■ Post.php
// Post.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
■ Comment.php
// Comment.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
ログインユーザーのものがあるか判定
use Illuminate\Support\Facades\Auth;
// ...
// $postは取得した投稿オブジェクト
$comments = $post->comments;
foreach ($comments as $comment) {
// コメントがログインユーザーのものかどうかを判断
$isCurrentUserComment = Auth::check() && $comment->user_id === Auth::id();
// $isCurrentUserCommentを使って何かしらの処理を行う
}
Blade上で何らかの条件分岐を行うならば、以下のようになります。
@php
$userHasCommented = $post->comments->where('user_id', Auth::id())->first();
@endphp
@if($userHasCommented)
<div>コメント済み</div>
@endif