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

Répondre à