@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
  • Вопрос задан
  • 643 просмотра
Пригласить эксперта
Ответы на вопрос 2
@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 }}
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Дядь если ты делаешь вызов first то иногда он возвращает null, привыкни писать проверку типа через двоеточие. Код сам станет красивым когда поймешь насколько это мощная штука.

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

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

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

Войти через центр авторизации
Похожие вопросы
АэроТур Санкт-Петербург
от 170 000 до 190 000 ₽
DIGITAL SECTOR Краснодар
от 100 000 до 150 000 ₽
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект