Получить все сообщения от пользователей, которые не заблокированы в Laravel? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть приложение Laravel 5.8, в котором один пользователь может заблокировать другого пользователя.

Модель пользователя:

public function blockedUsers()
{
   return $this->belongsToMany(User::class, 'blocked_user', 'user_id', 'blocked_id');
}

Теперь каждый пользователь может публиковать статьи. Как получить все статьи, которые публикуются не заблокированными пользователями в фиде пользователей.

Если я сделаю:

$posts = Post::all();

Очевидно, я получу все сообщения, так как сделать, где условия и сказать все сообщения, созданные пользователем, который не заблокирован Auth::user()?

$user = Auth::user();
$posts = Post::where(function($q) use ($user){
      // Can't figure out this part
})->get();

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Вы можете сначала получить свои заблокированные идентификаторы пользователей и использовать их позже в запросе, чтобы проверить, является ли создатель сообщения одним из заблокированных идентификаторов, используя whereNotIn()

$user = Auth::user();

// Get list of blocked user ids 
$blockedIds = $user->blockedUsers->pluck('id')->toArray();

// NOTE: I am assuming the field that hold the post creator id is user_id
// Get all post where the creator id is not in the blocked ids array
$posts = Post::whereNotIn('user_id',$blockedIds)->get();

В качестве альтернативы вы также можете написать это так

$user = Auth::user();
$posts = Post::where(function($q) use ($user){
      $q->whereNotIn('user_id', $user->blockedUsers->pluck('id'))
})->get();
0 голосов
/ 23 апреля 2020
$user_id = Auth::id();

// get all blocked users by auth user 
// note: you need to create BlockedUser model for blocked_user table  
$blocked_users=BlockedUser::where('user_id',$user_id)->pluck('blocked_id');

// get all posts without posts that created by blocked users
Post::whereNotIn('user_id',$blocked_users)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...