Проверьте, содержит ли коллекция значение

У меня настроены отношения (думаю, правильно) .. У меня есть 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 }} так что я могу использовать

‘если (это) содержит Auth::user->id()»…

2

Решение

Один из способов проверить это с помощью where() а также first() методы сбора:

if ($comment->commentLikes->where('user_id', auth()->user()->id)->first())
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
}
0

Опция 1

С помощью Коллекция Laravel Вы могли бы сделать это:

$comment->commentLikes->search(function ($item, $key) {
return $item->user_id == auth()->user()->id;
});

Это вернется false если ничего не найдено, или индекс, если пользователь находится в коллекции.

Делать это красиво

Но так как вы, вероятно, будете использовать это в представлении, я бы упаковал его в сбруя, что-то вроде этого:

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 если нет.

0

Использование:

if ($comment->commentLikes()->where('user_id', auth()->user()->id)->count() > 0)

Это более эффективным чем другие ответы, потому что оба метода where () и count () применяются к объекту построителя запросов вместо коллекции

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector