En fait il faut utiliser Doctrine::getTable() qui permet "de dire à Doctrine" que ce sont des opérations :
public function getActiveOperations() { $q = Doctrine::getTable('Operation') ->createQuery('o') ->innerJoin('o.Status s) ->where('o.user_id = ?', $this->getId()) ->andWhere(s.priority = 1) ->andWhere('o.expires_at > ?', date('Y-m-d H:i:s', time())) ->OrderBy('o.expires_at DESC'); return $q->execute(); } Le 26 août 2011 14:05, Cyril Flieller <cyril.fliel...@gmail.com> a écrit : > Merci pour ta réponse, seulement comme je l'ai précisé, je sais déjà ça. Ma > question est surtout de savoir si la requête en rouge était bonne, je sais > qu'elle n'est pas réutilisable. Car si dans le from je mets plusieurs > tables, comment Doctrine sait quelle collection il doit retourner. > > exemple : > > public function getActiveOperations(){ > $q = Doctrine_Query::create() > ->from('Operation o, o.Status s) > ->where('o.user_id = ?', $this->getId()) > ->andWhere(s.priority = 1) > ->andWhere('o.expires_at > ?', date('Y-m-d H:i:s', time())) > ->OrderBy('o.expires_at DESC'); > > return $q->execute(); > } > > > 2011/8/26 stakovicz <stakov...@gmail.com> >> >> Salut, >> >> La convention veut que l'on mettes les méthodes de manipulations de >> collections d'objets dans les operationTable.class.php. >> De plus cela permet de réutiliser la méthode getActiveOperations(). >> Image demain tu doit filtrer les opérations sur un autre critère. Tu >> n'as qu'à modifier la fonction getActiveOperations() et comme toutes >> tes requêtes se bases sur cette fonction il n'y a rien d'autre à >> faire. >> >> Mais j'aurais même fait comme ceci : >> >> //user.class.php >> public function getActiveOperations(){ >> $q = Doctrine_Query::create() >> ->from('Operation o') >> ->where('o.user_id = ?', $this->getId()); >> >> return Doctrine_Core::getTable('Operation') >> ->retrieveActives($q) >> ->execute(); >> } >> >> //operationTable.class.php >> public function retrieveActives(Doctrine_Query $q = null){ >> if (is_null($q)){ >> $q = Doctrine_Query::create() >> ->from('Operation o'); >> } >> // Récupère le nom de l'alias de la requête >> $root = $q->getRootAlias(); >> >> $q->andWhere($root.'.expires_at > ?', date('Y-m-d H:i:s', time())) >> ->addOrderBy($root.'.expires_at DESC'); >> >> return $q; >> } >> >> -- >> Albin >> >> Le 26 août 2011 12:57, Cyril Flieller <cyril.fliel...@gmail.com> a écrit : >> > Hello, >> > >> > quelqu'un peut-il m'expliquer la différence entre ces deux "techniques" >> > pour >> > récupérer toutes les opérations actives d'un utilisateur : >> > >> > //user.class.php >> > >> > public function getActiveOperations(){ >> > $q = Doctrine_Query::create() >> > ->from('Operation o') >> > ->where('o.user_id = ?', $this->getId()) >> > ->andWhere('o.expires_at > ?', date('Y-m-d H:i:s', time())) >> > ->OrderBy('o.expires_at DESC'); >> > >> > return $q->execute(); >> > } >> > >> > et >> > >> > //user.class.php >> > >> > public function getActiveOperations(){ >> > $q = Doctrine_Query::create() >> > ->from('Operation o') >> > ->where('o.user_id = ?', $this->getId()); >> > >> > return Doctrine_Core::getTable('Operation')->getActiveOperation($q); >> > } >> > >> > //operationTable.class.php >> > >> > public function getActiveOperations(Doctrine_Query $q = null){ >> > if (is_null($q)){ >> > $q = Doctrine_Query::create() >> > ->from('Operation o'); >> > } >> > >> > $q->andWhere('o.expires_at > ?', date('Y-m-d H:i:s', time())) >> > ->addOrderBy('o.expires_at DESC'); >> > >> > return $q->execute(); >> > } >> > >> > Outre le fait que cela permet de factoriser si l'on a besoin d'une >> > méthode >> > qui récupère toutes les opérations actives peu importe l'utilisateur. En >> > fait ma question est plutôt : est-ce que la technique en rouge est >> > fausse >> > d'un point de vu logique ? >> > >> > -- >> > Vous recevez ce message, car vous êtes abonné au groupe Google >> > Groupes Symfony-fr. >> > Pour envoyer un message à ce groupe, adressez un e-mail >> > à symfony-fr@googlegroups.com. >> > Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse >> > symfony-fr+unsubscr...@googlegroups.com. >> > Pour plus d'options, consultez la page de ce groupe : >> > http://groups.google.com/group/symfony-fr?hl=fr >> >> -- >> Vous recevez ce message, car vous êtes abonné au groupe Google >> Groupes Symfony-fr. >> Pour envoyer un message à ce groupe, adressez un e-mail >> à symfony-fr@googlegroups.com. >> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse >> symfony-fr+unsubscr...@googlegroups.com. >> Pour plus d'options, consultez la page de ce groupe : >> http://groups.google.com/group/symfony-fr?hl=fr >> > > -- > Vous recevez ce message, car vous êtes abonné au groupe Google > Groupes Symfony-fr. > Pour envoyer un message à ce groupe, adressez un e-mail > à symfony-fr@googlegroups.com. > Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse > symfony-fr+unsubscr...@googlegroups.com. > Pour plus d'options, consultez la page de ce groupe : > http://groups.google.com/group/symfony-fr?hl=fr > -- Albin Kester ----------------------------- 06 60 80 86 20 02 49 84 00 32 95 rue de la Patouillerie Bât. 8Q 44700 Orvault -- Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Symfony-fr. Pour envoyer un message à ce groupe, adressez un e-mail à symfony-fr@googlegroups.com. Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse symfony-fr+unsubscr...@googlegroups.com. Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/symfony-fr?hl=fr