我建立了关系(我认为正确)..我有3个表,用户,评论和评论'喜欢表。
在我的刀片中,我可以使用此访问{{ $comment->commentLikes }}
并且它正在返回我:
[{"id":85,"comment_id":12,"user_id":1,"action":1},
{"id":86,"comment_id":12,"user_id":3,"action":1},
{"id":87,"comment_id":12,"user_id":4,"action":1},
{"id":88,"comment_id":12,"user_id":6,"action":1},
{"id":89,"comment_id":12,"user_id":9,"action":1}]
user_id
代表所有者。
现在我想检查这个集合是否有经过身份验证的用户,换句话说,如果当前用户喜欢这个评论。有没有办法做到这一点而不是使用for循环?也许类似于{{ $comment->commentLikes->owner }}
,以便我可以使用
'if(this)包含Auth::user->id()
'...
答案 0 :(得分:0)
检查此方法的一种方法是使用where()
和first()
收集方法:
if ($comment->commentLikes->where('user_id', auth()->user()->id)->first())
答案 1 :(得分:0)
// This works if $comment->commentLikes returns a collection
$userLikes = $comment->commentLikes->where('user_id', Auth::user()->id)->all();
if ($userLikes->count() > 0) {
// Do stuff
}
答案 2 :(得分:0)
选项1
使用Laravel collection你可以这样做:
$comment->commentLikes->search(function ($item, $key) {
return $item->user_id == auth()->user()->id;
});
如果没有找到,则返回false
,如果用户在集合中,则返回索引。
做得很漂亮
但是既然你可能会在视图中使用它,我会将其打包成accessor,如下所示:
class Comment extends Model
{
public function commentLikes() {
// relationship defined
}
public function getHasLikedAttribute()
{
// use getRelationValue so it won't load again if it was loaded before
$comments = $this->getRelationValue('commentLikes');
$isOwner = $comment->commentLikes->search(function ($item, $key) {
return $item->user_id == auth()->user()->id;
});
return $isOwner === false ? false : true;
}
}
通过这种方式,您可以调用$comment->has_liked
,如果当前登录的用户位于关系true
或commentLikes
,则会返回false
。
答案 3 :(得分:0)
使用:
if ($comment->commentLikes()->where('user_id', auth()->user()->id)->count() > 0)
这比发布的其他答案更高效因为where()和count()都适用于查询构建器对象而不是集合