Le query builder

Par AlexJM, il y a 10 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Alors voilà, en gros j'ai un panel support sur mon site, et on peut associer une catégorie à un utilisateur.
Mais, lorsqu'on est admin, il faut qu'il ait accès à toutes les catégories, avec celles qui lui sont associées en évidence.
Donc ca marche plutôt bien (requête admin) :

$r = \DB::table('support_categories') ->leftJoin('support_tickets', 'support_tickets.support_category_id', '=', 'support_categories.id') ->select('support_categories.*') ->addSelect(\DB::raw('`support_categories`.`id` IN (SELECT `support_category_id` FROM `support_associations` WHERE `user_id` = 2) AS `attributed`')) ->addSelect(\DB::raw('COUNT(`support_tickets`.`id`) AS `count`')) ->groupBy('support_categories.id') ->orderBy('attributed', 'DESC') ->orderBy('support_categories.category') ->orderBy('support_categories.title') ->get();

Qui fait la requête suivante :

SELECT support_categories.*, support_categories.id IN(SELECT support_category_id FROM support_associations WHERE user_id = 2) AS attributed, COUNT(support_tickets.id) AS count FROM support_categories LEFT JOIN support_tickets ON support_tickets.support_category_id = support_categories.id GROUP BY support_categories.id ORDER BY attributed DESC, support_categories.category, support_categories.title;

Ce que je veux

Le problème, c'est que le user_id = 2 doit pouvoir changer. Or je n'ai pas réussi à trouver un moyen de pouvoir le passer via la requête préparée (un "?" ou un ":user_id").
Merci d'avance à tous :)

5 réponses

AlexJM, il y a 10 ans

Oui

Axis, il y a 10 ans

Ton user_id proviens de Auth() ?

Azorgh, il y a 10 ans

Hello,

Question bête, tu ne peux pas utiliser les méthodes Eloquent avec les relations ? Ce sera probablement plus simple et plus clair à écrire non ?

Axis, il y a 10 ans

un Auth::id() a la place du 2 ne fonctionne pas ?

AlexJM, il y a 10 ans

Bah ca me semble compliqué :/

Bah je pensais le faire propremenent avec une requête préparée