IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ORM PHP Discussion :

requête pour calculer une somme [Doctrine]


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut requête pour calculer une somme
    Bonjour,

    Je suis débutante en Doctrine et symfony et je ne sais pas comment écrire une requête en DQL pour récupérer la somme de quantités à partir de la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    livraisonArticle:
    PackageId
    ArticleId
    Nbr_pieces
    quantite_par_piece
    un package contient plusieurs articles (sur cette table on peut avoir plusieurs lignes avec un même PackageId mais avec des ArticleId différents), sachant qu'un article est un produit liquide, je voudrais calculer pour chaque package la quantité totale de tous les produits qu'il contient (pour un produit quantité = Nbr_pieces*quantite_par_piece)

    Autre question, à quel niveau du module "livraisonArticle" je peux intégrer cette requête: au niveau du controller (action "executeIndex" par ex)?

    Merci pour votre aide!!!

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    La documentation pour les requêtes DQL et l'agrégation de résultat (somme, moyenne,...) ce trouve ici.

    Si tu n'y arrives pas (les premières ne sont pas simple), met ton shema.yml (ce que tu as posté n'est pas un shema valide) et la requête DQL que tu as créée.

    Autre question, à quel niveau du module "livraisonArticle" je peux intégrer cette requête: au niveau du controller (action "executeIndex" par ex)?
    C'est une bonne question qui est capable de faire débattre des spécialistes sur plusieurs pages de messages !

    Donc je te donne ma réponse pour ce qu'elle vaut.

    La théorie veux que tous ce qui a trait aux données soit dans le modèle (les objets dans lib/model/...). Donc créer là une méthode qui, avec les éventuelles paramètres donnés en entrée va retourner les données à ton contrôleur (qui lui va les envoyer au template)(jamais de communication directe entre le modèle et le vue (template).

    La pratique veux que, dans certains cas, pour des raisons pratiques ou d'allègement du code dans le modèle, ce type d'action (la requête) soit déléguée au contrôleur, après tous, il ne fait qu'utiliser un objet du modèle paramétrable...

    En conclusion, si la requête est utilisée deux fois ou plus, elle doit être dans le modèle, si non, a toi de voir...

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    La documentation pour les requêtes DQL et l'agrégation de résultat (somme, moyenne,...) ce trouve ici.

    Si tu n'y arrives pas (les premières ne sont pas simple), met ton shema.yml (ce que tu as posté n'est pas un shema valide) et la requête DQL que tu as créée.

    C'est une bonne question qui est capable de faire débattre des spécialistes sur plusieurs pages de messages !

    Donc je te donne ma réponse pour ce qu'elle vaut.

    La théorie veux que tous ce qui a trait aux données soit dans le modèle (les objets dans lib/model/...). Donc créer là une méthode qui, avec les éventuelles paramètres donnés en entrée va retourner les données à ton contrôleur (qui lui va les envoyer au template)(jamais de communication directe entre le modèle et le vue (template).

    La pratique veux que, dans certains cas, pour des raisons pratiques ou d'allègement du code dans le modèle, ce type d'action (la requête) soit déléguée au contrôleur, après tous, il ne fait qu'utiliser un objet du modèle paramétrable...

    En conclusion, si la requête est utilisée deux fois ou plus, elle doit être dans le modèle, si non, a toi de voir...
    Merci pour ta réponse et pour le lien.
    j'ai galéré aujourd'hui pour essayer d'avancer pour DQL en cherchant sur le net.
    j'ai dû finalement insérer la requête au niveau du contrôleur, j'ai réussi à calculer la somme mais en fait là je bloque sur un point
    je voudrais calculer cette somme selon l'unité (g ou ml) de l'article.
    voilà ce que j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     public function executeIndex(sfWebRequest $request)
      {
     
    $tab = array(1 => "g", 2 => "ml");
      	foreach ($tab as $cle=>$valeur)
      	{
      	$this->article_package = Doctrine_Core::getTable('ArticleIntegrePackage')
       ->createQuery('a')
      ->addSelect('package_id, nbr_pieces, quantite_par_piece, unite, SUM(nbr_pieces*quantite_par_piece) as somme') 
      ->where('a.unite = ?', $valeur)
     	->andWhere('a.Package_id = ?', 1)
    	  ->execute();
     
    	  }
    En fait, le problème c'est que j'ai pas le résultat de cette somme (quantité totale) en fonction des valeurs du tableau (g ou ml), ça m'affiche uniquement pour "ml"

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Le addSelect est select() en fait.

    Utilises les nom objet pour les objets dans le select précédés de a.
    (ex a.packageId)

    La valeur a récupérer se trouve dans somme.

    Essayes avec execute() de faire une hydratation en tableau ce qui devrait être plus simple.

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Le addSelect est select() en fait.

    Utilises les nom objet pour les objets dans le select précédés de a.
    (ex a.packageId)

    La valeur a récupérer se trouve dans somme.

    Essayes avec execute() de faire une hydratation en tableau ce qui devrait être plus simple.
    Merci
    je viens de changer le select et j'ai rajouté les a.
    Mais pour execute(), je sais pas du tout comment faire l'hydratation en tableau
    j'essaie de chercher sur le net, mais si tu peux me donner une piste, j'en serai reconnaissante

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    La documentation est ici.

    la commande pour execute en tableau est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
    elle est un peu perdue dans la page.

    Les données sont plus simple à afficher, mais elle ne seront pas modifiable.

    Un var_dump sur ce résultat devrait donner une bonne idée de ce que doctrine à récupéré.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 18/06/2011, 14h01
  2. [MySQL] Calculer une somme pour chaque ligne et colonne d'un tableau
    Par baggie dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/05/2010, 09h55
  3. Requête sql pour afficher une somme
    Par nora2311 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/06/2009, 16h47
  4. Réponses: 5
    Dernier message: 26/11/2008, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo