Doctrine, group by, count

Rechercher

Doctrine, group by, count

Par symff  -  1 reponse  -  Le 27/04/2010 11:41  -  Editer  - 

Bonjour,

Ca fait quelques jours que je teste les requêtes doctrine. Mais là j'ai un problème que j'arrive pas à résoudre...

Je n'arrive pas à écrire ma requête SQL en doctrine.

Voilà la requête :

SELECT COUNT( t.NumTraitement ) , m.Machine
    FROM TTraitement t, TType2traitement a, TMachine m
    WHERE t.TType2traitement_NumType = a.NumType
    AND a.TMachine_NumMachine = m.NumMachine
    GROUP BY a.TMachine_NumMachine, YEAR(DateTraitement) DESC

 

Elle marche très bien et me renvoie : 5876 soudeuse 171 meuleuse matix

Le problème c'est pour mettre en doctrine avec le count. Parce qu'il doit me compter selon les différents GROUP BY. J'ai essayer plusieurs choses, comme :

$req = $this->createQuery('t')
  ->select('NumTraitement')
  ->from('TTraitement t, TType2traitement a, TMachine m')
  ->where('t.TType2traitement_NumType = a.NumType')
  ->andWhere('a.TMachine_NumMachine = m.NumMachine')
  ->groupBy('a.Tmachine_NumMachine');
return $req->count();

Mais forcément il me retourne 2. Alors j'ai testé ça:

$req = $this->createQuery('t')
  ->select('COUNT(NumTraitement)')
  ->from('TTraitement t, TType2traitement a, TMachine m')
  ->where('t.TType2traitement_NumType = a.NumType')
  ->andWhere('a.TMachine_NumMachine = m.NumMachine')
  ->groupBy('a.Tmachine_NumMachine');
return $req->execute();

Et quand je l'apelle avec une boucle :

<?php foreach($nb_soud_poste as $nb_soud)
      {
  echo $nb_soud;
      }
?>

J'ai une erreur sur mon echo : Catchable fatal error: Method sfOutputEscaperIteratorDecorator::__toString() must return a string value in ...

Je ne sais pas du tout comment faire, qqun peut m'aider ?

 

 

Réponses apportées à cette discussion

Par FPCPROD  -  Le 02/08/2011 09:45  -  Haut de page  - 

Je viens d'y asser une bonne demi journée. Il est primordial (ne me demandes pas pourquoi) de mettre dans le select au moins une clé primaire surtout lorsqu'il y a jointure comme dans ton cas.

$req = $this->createQuery('t')
  ->select('COUNT(NumTraitement), t.id')
  ->from('TTraitement t, TType2traitement a, TMachine m')
  ->where('t.TType2traitement_NumType = a.NumType')
  ->andWhere('a.TMachine_NumMachine = m.NumMachine')
  ->groupBy('a.Tmachine_NumMachine');
return $req->execute();

et comme par magie, le résultat est enfin complet.

J'imagine que tu as trouvé ta solution depuis avril 2010, néanmoins, comme tu es un des premiers résultats sur Google, j'ai pensé pouvoir rendre service aux autres.

Bon code!

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |