@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
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Kostik_1993
Fullstack Web Developer | PHP | Laravel | Vue.js
За такое вас могут отправить в ад. Научитесь пользоваться отношениями. Нельзя из модели получать данные так как вы их получаете.
ваш код можно привести как минимум к такому виду
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 }}
Ответ написан
gzhegow
@gzhegow
Думал, стану умнее, когда адаптируюсь, но нет
Дядь если ты делаешь вызов first то иногда он возвращает null, привыкни писать проверку типа через двоеточие. Код сам станет красивым когда поймешь насколько это мощная штука.

Ты лайк берешь из того чего может не быть. Если бы двоеточие инт написал ругнулось бы что функция такаято вернула не инт, пошел бы исправил. А так в середине кода гдето ктото пытается выдрать по первому ключу и хз кто это.

А еще коммент лайкс вероятно возвращающее массив ты отнимаешь из него... Цифру. Оно хорошо что вообще работает
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы