@Aslero

Вывести значение модели Laravel?

есть модель Comment

в ней делаю функцию вывода значения like для пользователя. Если он лайнкул то 1, если дизлайк то 0

public function islike(){
        $likes = CommentLike::where('comment_id', $this->id)->where('user_id', Auth::user()->id)->first();
        return $likes->like;
    }

при выводе комментариев

<button class="btn-like">
   <svg><use xlink:href="#like"></use></svg>
   span class="like-count">{{ $comment->likes() }} - {{$comment->islike()}}</span>
</button>
<button class="btn-like dislike">
   <svg><use xlink:href="#like"></use></svg>
   <span class="dislike-count">{{ $comment->dislikes() }} - {{$comment->islike}}</span>
 </button>

хочу вывести значение, но пишет

ErrorException
Undefined offset: 1
  • Вопрос задан
  • 686 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Kostik_1993
Web Developer
За такое вас могут отправить в ад. Научитесь пользоваться отношениями. Нельзя из модели получать данные так как вы их получаете.
ваш код можно привести как минимум к такому виду
class Comment extends Model
{
    public function likes()
    {
        return $this->hasMany(CommentLike::class);
    }
    public function isLikeByUser($user = null)
    {
        if (!$user) {
            return false;
        }
        $users = $this->likes->pluck('user_id');
        return in_array($user->id, $users);
    }
}


В контроллере нужно обязательно запросить лайки сразу все, это оптимизирует количество запросов к бд до 2-х вместо ваших n + 1
$comments = Comment::with('likes')->get();

А уже в шаблоне вы можете просто запросить по пользователю
{{ $comment->isLikeByUser(Auth::user()) ? 1:0 }}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы