Besoin d'aide ?

Requête complexe : SQL vers ELOQUENT

Avatar de Seeryos
Seeryos

Bonjour à tous,

J'éprouve quelques difficultés sur une requête assez complexe que j'aimerais résoudre en utilisant Eloquent. La requête en question :

                SELECT users.*, count(*) as number 
                FROM user_category 
                INNER JOIN users 
                ON users.id = user_category.user_id 
                WHERE (category_id = 30 OR category_id = 33) 
                GROUP BY user_id 
                HAVING number = 2

En gros, mes utilisateurs sont triés par catégorie. Je souhaite récupérer les utilisateurs qui appartiennent à la fois à la catégorie 30 ET à la catégorie 33. Niveau SQL, les résultats semblent correctes. Maintenant niveau Eloquent j'ai beaucoup de difficultés.

J'ai commencé par faire ceci :

                User::whereHas('categories', function(Builder $query) use ($categories){
                    foreach ($categories as $category) {
                        $query->where('id', $category);
                    }
                })->where('id', '<>', $request->user()->id)->with('categories')->paginate($this->pagination)

Mais ça n'est pas très concluant puisque ça me ressort les utilisateurs avec la catégorie 30 OU 33 ... J'ai tenté avec un whereIn mais même chose (logique). Je sèche un peu

Merci de votre aide !

Avatar de stockhausen
stockhausen
   foreach ($categories as $category) {
                        $query->**orWhere**('id', $category);
                    }
Avatar de bestmomo
bestmomo

Salut,

Tu as essayé un truc comme ça ?

User::whereHas('categories', function($query) {
    $query->where('categories.id', 30)->where('categories.id', 33);
})->get();

Vous ne pouvez pas répondre à ce sujet.