2011-01-02 6 views
0

Existe-t-il un moyen plus simple de construire des querys dans la doctrine? À ce point il n'y a qu'un seul paramètre, mais dans certains cas, il pourrait y avoir comme nom d'utilisateur, nom de variable, etc. Certains d'entre eux pourraient être nuls ou vides. J'ai juste besoin d'une implémentation simple de StringBuilder pour ceux-là. J'ai essayé de faire une requête DQL avec LEFT JOIN, mais je n'ai aucune idée de comment faire des requêtes DQL?dql query builder Doctrine 1.2

public function getTagsByApiKey($apikey='', $limit = 20){ 
     $whereArray = array(); 
     $whereClauseArray = array(); 



     if($apikey != ''){ 
      array_push($whereClauseArray, ' f.apikey = :apikey '); 
      $whereArray[':apikey'] = $apikey; 
     } 

     $whereClause = ''; 
     for ($i=0; $i < sizeof($whereClauseArray); $i++) { 
      if($i>0){ 
       $whereClause .= ' AND '; 
      } 
      $whereClause .= $whereClauseArray[$i]; 

     } 


     $q = Doctrine_Query::create() 
      ->from('Tag t') 
      ->leftJoin('t.Feedback f') 
      ->where($whereClause, $whereArray) 
      ->orderBy('t.count ASC') 
      ->limit($limit); 
     return $q->execute(); 

} 

Répondre

1

Avec Doctrine 2, vous pouvez écrire DQL d'une manière SQL (SELECT * FROM table t....).

Dans Doctrine 1.x, vous pouvez construire la requête en différentes étapes.

Ceci est juste un exemple simple, sans sens si vous voyez ce que je veux dire:

$q = Doctrine_Query::create() 
      ->from('Tag t') 
      ->leftJoin('t.Feedback f'); 

$array = array("user" => "frank", "tag" => "music"); 
foreach($array as $key => $value) { 
    $q = $q->andWhere("t.$key = ?", $value); 
} 

$q = $q->orderBy('t.count ASC') 
     ->limit($limit); 

return $q->execute(); 
+0

Merci pour votre aide. Je dois attendre que mon ISP mette à jour vers PHP 5.3 puis je mets à jour vers la doctrine 2 – user257980

+0

Donc, longtemps, le code proposé ci-dessus peut faire l'affaire ... – DrColossos

Questions connexes