У меня SQL-запрос, который отлично работает, и я пытаюсь преобразовать в свободно:
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'
Это то, что я до сих пор свободно говорил, все кажется правильным, насколько я могу судить по документам, а отдельные запросы работают сами по себе, это просто, когда я СОЕДИНЯЕТ их, он выдает ошибку:
$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 на 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
Похоже, ваши модели используют Ardent, а не Eloquent:
...instance of LaravelBook\Ardent\Builder given, ...
И, вероятно, это может быть проблемой на Ярости, а не на Ларавеле.
Откройте здесь проблему: https://github.com/laravelbook/ardent .
РЕДАКТИРОВАТЬ:
Попробуйте изменить использование QueryBuilder вместо Eloquent:
Используйте это для QueryBuilder:
DB::table('tags')->
Вместо «Красноречивого» способа:
Tag::
Я знаю, что вы упомянули о том, что хотите использовать построитель запросов, но для сложных запросов, которые может создать компилятор, вы можете напрямую обращаться к объекту PDO:
$pdo = DB::connection()->getPdo();