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

Répondre à