2011-01-02 8 views
0

Gibt es einfachere Möglichkeit, Query in der Lehre zu bauen, dann dies. An diesem Punkt gibt es nur einen Parameter, aber einige Fälle könnten wie Benutzername, Tagname, etc. sein. Einige von denen könnten null oder leer sein. Ich brauche nur eine einfache StringBuilder-Implementierung für diese. Ich habe versucht, DQL-Abfrage mit LINKER JOIN zu tun, aber ich habe keine Ahnung, wie man DQL-Abfragen macht?dql Query Builder Doktrin 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(); 

} 

Antwort

1

Mit Lehre 2 können Sie DQL in einer SQL-Weise (SELECT * FROM table t....) schreiben.

In Doctrine 1.x können Sie die Abfrage in verschiedenen Phasen erstellen. Diese

ist nur ein einfaches Beispiel ohne Sinn, damit Sie sehen, was ich meine:

$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

Vielen Dank für Ihre Hilfe. Ich muss warten, dass mein ISP auf PHP 5.3 aktualisiert, dann aktualisiere ich auf Doktrin 2 – user257980

+0

So lange kann der vorgeschlagene Code von oben den Trick tun ... – DrColossos