Как проверить, нравится ли пользователю уже этот пост или нет в простой системе like?


Как проверить, нравится ли пользователю уже этот пост или нет в простой системе like?

04.11.2020 09:33:32 Просмотров 3 Источник

У меня есть созданная простая подобная система с фреймворком Laravel

Вот как выглядит моя схема таблицы:

Schema::create('likes', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('by_id');
    $table->unsignedBigInteger('post_id');
    $table->timestamps();
});

Мои красноречивые отношения просты:

Auth::user()->likes()->create(['post_id' => 'xxx']);

Это работает так, как я хочу, чтобы это было

И, как страницы, могу показать все сообщения этого пользователя ХХХ любит

@foreach ($user->likes as $post)
    ...
@endforeach

Довольно много просто

А теперь на главной странице Я хочу показать случайные посты

Поэтому я кодирую так:

$posts = Post::inRandomOrder()->get();

@foreach ($posts as post)
    ...
    
    // In each of these random post, check if user already like the post or not
    // If they do, show a button to delete the like
    // Else show button to like the post
@endforeach

В каждом из этих случайных постов я хочу знать, нравится ли текущему пользователю входа в систему этот пост или нет

Так как же этого добиться?

Извините за плохой английский

Заранее спасибо

У вопроса есть решение - Посмотреть?

Ответы - Как проверить, нравится ли пользователю уже этот пост или нет в простой системе like? / How to check if user already like the post or not in simple like system?

Repox

04.11.2020 09:43:13

Чтобы избежать множественных запросов, вы можете использовать массив идентификаторов записей и проверить наличие случайных записей в этом массиве:

$userPostLikes = $user->likes->pluck('post_id');

$posts = Post::inRandomOrder()->get();

@foreach ($posts as post)

  @if(in_array($post->id, $userPostLikes)) 
     user likes post
  @else
     user doesn't likes post
  @endif

@endforeach
Помочь в развитии проекта:
Закрыть X