dql построитель запросов Doctrine 1.2 - PullRequest
0 голосов
/ 02 января 2011

Есть ли более простой способ построения запросов в доктрине, чем этот.На данный момент есть только один параметр, но в некоторых случаях это может быть имя пользователя, тэг и т. Д. Некоторые из них могут быть нулевыми или пустыми.Мне просто нужна простая реализация StringBuilder для тех.Я пытался сделать DQL-запрос с помощью LEFT JOIN, но я понятия не имею, как делать DQL-запросы?

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 Ответ

1 голос
/ 05 января 2011

С Doctrine 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();
...