2017-10-07 23 views
0

J'utilise Lumen et c'est des modèles avec les relations du modèle. Ce que j'essaye de faire est d'obtenir toutes les catégories et de compter combien de messages chaque catégorie a, ce qui fonctionne bien. Cependant, je ne veux pas qu'il compte ceux qui creator_id == $current_user_id, comment dois-je le faire?Eloquent O WH PAS avec des relations

C'est dans ma classe Poste:

public function user(){ 
     return $this->belongsTo(User::class); 
} 

public function category(){ 
     return $this->belongsTo(Category::class); 
} 

Et cela est dans ma catégorie classe:

public function posts(){ 
     return $this->hasMany(Post::class); 
} 

Et voici ma requête:

public function getCategories($user_id){ 
     $categories = Category::withCount('posts')->get(); 
     return new JsonResponse(['categories' => $categories]); 
} 

Je ne sais pas vouloir compter les messages que l'utilisateur actuel a créés.

Ainsi, la sortie doit être quelque chose comme ceci:

{ 
    "categories": [ 
     { 
      "name": "All", 
      "posts_count": 0 
     }] 
} 

Ce que je aussi essayé sans succès:

$categories = Category::where('creator_id', '!=', $user_id)->withCount('posts')->get(); 

Répondre

1

Essayez d'utiliser la ligne suivante:

$categories = Category::withCount(['posts' => function($query) use($user_id){ 
    $query->where('creator_id', '!=', $user_id); 
}])->get(); 
+0

Merci, ça a marché. Mais est-il sécuritaire de l'utiliser comme ça? J'ai vu dans le post du forum de Laracast que vous ne devriez pas le faire comme ça. Je peux me tromper, corrigez-moi si je le suis. –

+0

N'hésitez pas à utiliser cette méthode. C'est la bonne façon de le faire –