2010-07-06 30 views
0

En doctrine, est-il possible d'ajouter une clause WHERE lors de l'extraction d'une propriété d'un objet qui correspond à une relation?Est-il possible d'ajouter des clauses WHERE lors de la récupération de relations?

En termes de concept, disons que je ne souhaite récupérer que les 3 premiers articles publiés au cours des 5 derniers jours. Mon objet "blog" a une propriété "posts" qui est définie comme une relation.

Mise à jour ...

Comme certaines personnes éprouvent des difficultés à comprendre ce que je veux dire par une relation:

class Blog extends Doctrine_Record { 

     ... 

     public function setUp() { 

      $this->hasMany("Note as Posts", array(
       "local" => "blog_name", 
       "foreign" => "post_id", 
       "refClass" => "BlogPost" 
      )); 

     } 
} 

Comme vous pouvez le voir, c'est une relation explicite soutenue par la doctrine. Lorsque je demande l'utiliser:

 $instanceOfBlog->Posts........... 

Je voudrais savoir si je peux ajouter des clauses supplémentaires à ce moment-là.

+0

Pourquoi ne pas ajouter la clause where avant d'exécuter la requête? – DrColossos

+0

Pouvez-vous fournir un exemple de code? – Tom

+0

Je ne suis pas sûr si un exemple de code est nécessaire compte tenu de l'explication que j'ai fournie. Problème étant, je ne connais pas le code pour donner un exemple de! J'ai une relation dans une classe. Je veux ajouter des clauses WHERE lors de l'accès à la relation. Est-ce possible? –

Répondre

3

Je ne sais pas, je vous suis, mais si c'est ce que je pense alors dans votre classe BlogTable:

public function getRecentPosts() 
{ 
    $qry = self::createQuery("b") 
    ->innerJoin("b.Posts p") 
    ->where("p.created_at > ?", date("Y-m-d H:i:s", strtotime("-5 days"))) 
    ->orderBy("p.created_at DESC") 
    ->limit(3); 

    $results = $qry->execute(); 
} 

Est-ce que vous étiez après? Ceci est basé sur le champ created_at dans l'objet Posts et suppose qu'une relation est définie entre les tables Blog et Posts.

J'ai peut-être mal compris votre question cependant :-)