2013-09-27 166 views
1

我有一個SQL查詢,工作正常,我想轉換爲流暢::Laravel查詢生成器使用UNION

SELECT DISTINCT tags.tag 
    FROM tags, items 
    WHERE tags.taggable_type = 'Item' 
    AND items.item_list_id = '1' 
UNION 
SELECT DISTINCT tags.tag 
    FROM tags, itemlists 
    WHERE tags.taggable_type = 'ItemList' 
    AND itemlists.id = '1' 

這是我用流利的,到目前爲止,這一切似乎是正確的據我可以從文檔告訴我們,各個查詢都對自己的工作,只是當我UNION他們就拋出一個錯誤:

$itemTags = Tag::join('items', 'items.id', '=', 'tags.taggable_id') 
       ->select('tags.tag') 
       ->distinct() 
       ->where('tags.taggable_type', '=', 'Item') 
       ->where('items.item_list_id', '=', $itemList->id); 

    $itemListTags = Tag::join('itemlists', 'itemlists.id', '=', 'tags.taggable_id') 
       ->select('tags.tag') 
       ->distinct() 
       ->where('tags.taggable_type', '=', 'ItemList') 
       ->where('itemlists.id', '=', $itemList->id); 
// the var_dump below shows the expected results for the individual queries 
// var_dump($itemTags->lists('tag'), $itemListTags->lists('tag')); exit; 
    return  $itemTags 
       ->union($itemListTags) 
       ->get(); 

我收到以下錯誤,當我運行它(我也如果有所改變,它將從Ardent換到模型上) -

Argument 1 passed to Illuminate\Database\Query\Builder::mergeBindings() must be an instance of Illuminate\Database\Query\Builder, instance of LaravelBook\Ardent\Builder given, called in path/to/root\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php on line 898 and defined 

回答

4

看起來你的模型使用熾熱,沒有雄辯:

...instance of LaravelBook\Ardent\Builder given, ... 

,也許這可能是一個問題上熾熱,不Laravel。

在此處打開問題:https://github.com/laravelbook/ardent

編輯:

試圖改變使用的QueryBuilder代替雄辯:

使用本作的QueryBuilder:

DB::table('tags')-> 

代替雄辯的語言:

Tag:: 
+0

嗨,我已經嘗試設置所有三種型號延長雄辯不熾熱II得到類似的錯誤:'參數1傳遞給照亮\數據庫\ Query \ Builder :: mergeBindings()必須是E:\ docs \ Documents \ Work \ MGC \ mgc_root \ vendor \ laravel中給出的Illuminate \ Database \ Query \ Builder實例,其中包含Illuminate \ Database \ Eloquent \ Builder實例\ framework \ src \ Illuminaate \ Database \ Query \ Builder.php在第898行並且定義了' –

+0

您使用的是Laravel 4.0還是4.1? –

+0

4.0我相信,我會嘗試運行作曲家更新,以查看是否有幫助 –

1

我知道你提到想要使用查詢生成器,但對於bui的複雜查詢lder連續可能拋出適合,你可以直接訪問PDO對象:

$pdo = DB::connection()->getPdo();