Bonjour,

J'ai encore une demande pour savoir comment vous pratiquez. J'ai une table posts qui contient un type_id et qui est relié à la table types qui contient un category_id qui relie à la table categories.
Je souhaite paginer tous les posts qui ont category_id = 3.
Actuellement je fais :

$posts = Post::with(['type.category'])
             ->select('posts.*')
             ->leftJoin('types', 'type_id', '=', 'types.id')
             ->leftJoin('categories', 'category_id', '=', 'categories.id')
             ->where('category.id', 3);
$posts = $posts->paginate(25);

Mais du coup je ne trouve pas ça très propre ni très efficace. Existe-t'il des manières plus propres de faire ça ? Si oui, lesquelles ?

3 réponses


Azorgh
Réponse acceptée

Hello,

Je te conseil d'utiliser les relations Eloquents : https://laravel.com/docs/5.2/eloquent-relationships (plus besoin de left Join dans ton cas par exemple).

Onouriis
Auteur
Réponse acceptée

J'ai honte depuis le temps que je cherche mais j'ai réussi à résoudre mon problème en retournant une n-ième fois sur ton lien. (whereHas is my friend now)

Onouriis
Auteur

J'utilise déjà les relations Eloquent justement. Mais je ne sais pas faire ce que je cherche autre qu'avec un leftJoin.