Doctrine, group by, count
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
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!