Query Builder - calculs dans un select

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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.

Édité par La source

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte