2010-11-15 24 views
1

Est-il possible de définir une contrainte dans un modèle Doctrine, afin que toutes les requêtes utilisant ce modèle incluent cette exigence? Par exemple, si j'ai un Modèle de voiture et que je veux m'assurer que tous les résultats récupérés en utilisant le modèle ont active = 1 dans la base de données. Je pourrais définir cela dans chaque requête individuelle, mais il semble qu'il y ait probablement un meilleur moyen.Définition d'une valeur obligatoire dans le modèle Doctrine

À la votre!

+0

bonne question! J'aimerais aussi avoir la réponse à ce sujet. Dans mon cas, je veux toujours des utilisateurs qui sont toujours actifs. – Kennethvr

Répondre

1

Je profiterais de leurs crochets avant et après étonnants à l'intérieur du modèle.

Exemple:

class Model_Car extends Model_Base_Car 
{ 
    public function preDqlSelect(Doctrine_Event $event) 
    { 
     $event->getQuery()->addWhere("active = ?", 1); 
    } 
} 

Bien que je n'ai pas testé cela, il devrait fonctionner. J'ai beaucoup utilisé les pré et post-hooks pour me faciliter la vie dans le passé. Par exemple, j'avais un modèle qui voulait sauver le REMOTE_ADDR sur chaque insert et mise à jour, donc je l'ai fait ce qui suit pour rendre ma vie plus facile:

class Model_Example extends Model_Base_Example 
{ 
    public function preInsert(Doctrine_Event $event) 
    { 
     $this->created_ip = $this->_getRemoteIp(); 
    } 

    public function preUpdate(Doctrine_Event $event) 
    { 
     $this->updated_ip = $this->_getRemoteIp(); 
    } 

    protected function _getRemoteIp() 
    { 
     return ip2long($_SERVER['REMOTE_ADDR']); 
    } 
} 

espérons que cette aide!

0

Je le ferais dans la requête -> andWhere ('active =?', 1), mais si vous essayez de faire ce "truc difficile", vous pouvez toujours construire votre propre hydrateur.