Bonjour.
J’ai besoin d’un peu d’aide SVP car je n’arrive pas à finir une requête SQL.
En une seule requête SQL, je veux :
Récupérer tous les utilisateurs + Compter leurs nombre de commandes validés + Compter leurs nombre de commandes qui ne sont pas validés.
Voici ma requête SQL actuelle :
User::select([
Database::USERS.'.id', Database::USERS.'.first_name', Database::USERS.'.last_name',
// ces 2 COUNT me retournent la même valeur, c'est ça le problème...
DB::raw('COUNT( CASE WHEN '.Database::ORDERS.'.validated_at IS NOT NULL THEN 1 ELSE 0 END ) as nbOrdersValidatedJoined'),
DB::raw('COUNT( CASE WHEN '.Database::ORDERS.'.validated_at IS NULL THEN 1 ELSE 0 END ) as nbOrdersNotValidatedJoined')
])
->join(
Database::ORDERS,
Database::USERS.'.id', '=', Database::ORDERS.'.user_id'
)
->groupBy(
Database::USERS.'.id', Database::USERS.'.first_name', Database::USERS.'.last_name',
)
->get();
Là c’est du Laravel, mais c’est compréhensible pour tous développeurs PHP.
PS :
_Les commandes validés ont le champ 'validated_at' qui n’est pas NULL (je met la date de validation lorsqu’une commande est validé).
_Database::USERS est la tables des utilisateurs et Database::ORDERS est la tables des commandes.
Je précise aussi que c’est la 1ère fois que j’essaye d’utiliser CASE WHEN… C’est la où je ne doit surement pas bien faire les choses… Et je ne sais même pas si c’est techniquement possible de faire ce que je veux en une seule requête SQL.
Et à l’affichage dans la vue de listage, je veux afficher le nombre de commandes validés par utilisateur et le nombre de commandes non validés par utilisateur comme ceci :
@foreach ($users as $user)
{{ $user->first_name }} {{ $user->nbOrdersValidatedJoined }} {{ $user->nbOrdersNotValidatedJoined }}
@endforeach
Merci beaucoup.