2013-09-27 9 views
1

У меня есть запрос SQL, который работает отлично, и я пытаюсь преобразовать в FLUENT ::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 back to Eloquent на модели в случае, если это имело значение - это не так):

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

Похоже, ваши модели используют Пылкий, не Eloquent:

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

И, вероятно, это может быть проблемой на Ardent, не Laravel.

Открыть вопрос здесь: https://github.com/laravelbook/ardent.

EDIT:

Попробуйте изменить использование QueryBuilder вместо красноречив:

Используйте это для QueryBuilder:

DB::table('tags')-> 

Вместо красноречивым образом:

Tag:: 
+0

Привет, я попытался установить все три модели, чтобы расширить красноречивый не Пылкий II получить подобную ошибку: 'Аргумент 1 передается Осветить \ Database \ Query \ Builder :: mergeBindings() должен быть экземпляром Illuminate \ Database \ Query \ Builder, экземпляр Illuminate \ Database \ Eloquent \ Builder, указанный в E: \ docs \ Documents \ Work \ MGC \ mgc_root \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Query \ Builder.php в строке 898 и определены ' –

+0

Используете ли вы Laravel 4.0 или 4.1? –

+0

4.0 Полагаю, я попробую запустить обновление для композитора, чтобы узнать, поможет ли это –

1

Я знаю, вы упомянули о желании использовать построитель запросов, но для сложных запросов, которые bui lder может бросить подходит, вы можете напрямую обратиться к объекту PDO:

$pdo = DB::connection()->getPdo(); 
Смежные вопросы