Bonjour,
Je souhaite réaliser une requête me renvoyant des totaux, cependant certain d'entres eux doivent être calculé pour être obtenu.
Concrètement j'ai une entité Product
ayant un nom
, un prixUnitaire
, une quantité
et un taux_tva
.
A partir de ses informations, dans ma classe j'ai créé des méthodes getPrixTotal
, getTotalHTVA
et getTotalTVA
me permettant d'obtenir les informations que je souhaite à partir des informations stockée dans mon entité.
Je suis déçu de ne pouvoir utiliser les méthodes dans ma requête de sélection car si un jour je change la méthode getPrixTotal
je ne devrai pas oublier de modifier ma requête de sélection par ailleurs si je souhaite continuer à obtenir des résultats cohérent.
Cependant ce n'est pas le problème (enfin s'il y avait une solution cela résoudrait mon problème actuel).
J'ai donc écris une requête à l'aide du QueryBuilder, celle-ci fonctionne mais j'ai le sentiment qu'elle n'est pas du tout optimisée.
Le problème est le suivant, pour obtenir le total TVA je dois obtenir le total et le Total HTVA et pour obtenir le total HTVA je dois obtenir le total, sauf que je n'ai pas réussis à expliquer à MySQL via le QueryBuilder à utiliser les résultats intermédiaire. Voici la requête que je souhaiterai obtenir:
1 2 3 4 5 6 7 8 | <?php $queryBuilder->select([ 'p.taux_tva', 'SUM(p.prix_unitaire * p.quantite) as prix_total', 'prix_tota - htva as tva', '(prix_total / (1 + p.taux_tva / 100)) AS htva' ]) // Il y a un groupBy sur taux_tva |
Le problème avec cette méthode c'est que j'ai l'erreur sql suivante:
Column not found: 1054 Champ 'prix_total' inconnu dans field list
La raison étant qu'il traduis mes instructions AS prix_total
par AS sclr_2
dans la requête réellement executée.
A la place pour que cela fonctionne je suis obligé d'écrire ceci, j'ai peur qu'avec cette méthode j'ai des résultats execrable en terme de performances. (à moins que MySQL soie intelligent et ne recalcul pas plusieurs fois la même chose et donc que cela ne me pose finalement pas de problème)
1 2 3 4 5 6 7 | <?php $queryBuilder->select([ 'p.taux_tva', 'SUM(p.prix_unitaire * p.quantite) as prix_total', 'SUM(p.prix_unitaire * p.quantite) - (SUM(p.prix_unitaire * p.quantite) / (1 + p.taux_tva / 100)) as tva', '(SUM(p.prix_unitaire * p.quantite) / (1 + p.taux_tva / 100)) AS htva' ]) |
Merci d'avance pour votre aide.
Cordialement, La source.