J'ai une application Laravel 5.8 où un utilisateur peut bloquer un autre utilisateur.

Modèle utilisateur:

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

Désormais, chaque utilisateur peut publier des articles. Comment obtenir tous les articles publiés par des utilisateurs non bloqués dans le fil des utilisateurs.

Si je fais:

$posts = Post::all();

Évidemment, je recevrai tous les messages, alors comment créer une condition where et dire tous les messages créés par un utilisateur qui n'est pas bloqué par {{X 0}}?

$user = Auth::user();
$posts = Post::where(function($q) use ($user){
      // Can't figure out this part
})->get();
0
Emmanuel-Ab 23 avril 2020 à 00:00

2 réponses

Meilleure réponse

Vous pouvez d'abord obtenir vos identifiants d'utilisateurs bloqués et les utiliser plus tard dans la requête pour vérifier si le créateur du post est l'un des identifiants bloqués à l'aide de 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();

Vous pouvez également l'écrire comme ceci

$user = Auth::user();
$posts = Post::where(function($q) use ($user){
      $q->whereNotIn('user_id', $user->blockedUsers->pluck('id'))
})->get();
2
Helioarch 22 avril 2020 à 23:26
$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();
0
Mortada Jafar 22 avril 2020 à 21:58