2017-07-07 1 views
1

J'ai deux tables Projets et catégories avec une relation plusieurs à plusieurs depuis un projet peut être sous plusieurs catégories.PHP Laravel manytomany requête distincte éloquente

Dans Laravel 5.4 J'ai mis en place une relation manytomany sur les deux modèles qui utilise le tableau pivotant category_project.

Je voudrais récupérer tous les projets sous un tableau de catégories.

Pour une seule catégorie cela fonctionne bien

$Projects = Category::find(1)->projects()->distinct(); 

Cependant quand je passe dans un tableau de ids pour trouver la méthode de recherche que je reçois une erreur « projets de méthode n'existe pas » que je suppose est parce qu'il retourne une collection.

$Projects = Category::find([1,2])->projects()->distinct(); 

Est-ce que je vais dans ce sens? Que dois-je faire pour obtenir les projets pour une liste d'identifiants de catégorie (dans cet exemple 1 et 2).

Répondre

1

Si vous souhaitez que des projets distincts appartiennent à la catégorie 1 ou à la catégorie 2, il est plus facile de procéder autrement, par ex.

$categories = [1,2]; 
$projects = Projects::whereHas(["category" => function ($query) use ($categories) { 
     return $query->whereIn("category_id",$categories); 
}])->get(); 

Si vous voulez des projets qui appartiennent à deux catégories, vous pouvez modifier votre condition

$projects = Projects::whereHas(["category" => function ($query) use ($categories) { 
    return $query->where(collect($categories)->map(function ($v) { 
      return ["category_id",$v]; 
    })); 
}])->get(); 
+0

Merci pour cela ... Je vais donner un aller! Serais-je en mesure d'attacher pagination() à la fin de l'obtenir? Je vais essayer ... Je suis assez nouveau pour éloquent et les méthodes collect() et map() sont nouvelles pour moi. Bon moment pour apprendre ce qu'ils font ... Merci encore. – user1002794

+0

@ user1002794 'collect' n'est pas directement lié à eloquent. Il est lié à [Laravel collections] (https://laravel.com/docs/5.4/collections) qui sont essentiellement le remplacement OOP/fluent de laravel aux tableaux et sont également utilisés dans les ensembles de résultats du modèle. – apokryfos