2011-01-02 3 views
0

Есть ли более простой способ построения запросов в доктрине, то это. На этой точке есть только один параметр, но в некоторых случаях это может быть как имя пользователя, тэг и т. Д. Некоторые из них могут быть пустыми или пустыми. Мне просто нужна простая реализация StringBuilder для них. Я пытаюсь выполнить DQL-запрос с LEFT JOIN, но я понятия не имею, как выполнять 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(); 

} 

ответ

1

С доктриной 2, вы можете написать DQL в SQL образом (SELECT * FROM table t....).

В Doctrine 1.x, что вы можете сделать, это построить запрос на разных этапах.

Это просто простой пример без смысла, так что вы понимаете, что я имею в виду:

$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

Спасибо за вашу помощь. Мне нужно дождаться, что мои ISP обновятся до PHP 5.3, а затем я обновляюсь до доктрины 2 – user257980

+0

До тех пор, предлагаемый код сверху может сделать трюк ... – DrColossos