簡體   English   中英

dql查詢構建器Doctrine 1.2

[英]dql query builder Doctrine 1.2

有沒有更簡單的方法來構建學說中的查詢呢? 此時只有一個參數,但在某些情況下可能會出現諸如用戶名,標記名等。其中一些可能為null或為空。 我只需要簡單的StringBuilder實現即可。 我已經嘗試使用LEFT JOIN進行DQL查詢,但是我不知道如何進行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();

}

使用Doctrine 2,您可以以SQL方式編寫DQL( 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM