1

正常に動作する 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'

これは私がこれまで流暢に話したものであり、ドキュメントからわかる限りすべて正しいように見え、個々のクエリは両方とも単独で機能します。それらを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 から 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

2 に答える 2

1

クエリ ビルダーを使用したいとおっしゃっていましたが、ビルダーが適合する可能性のある複雑なクエリの場合は、PDO オブジェクトに直接アクセスできます。

$pdo = DB::connection()->getPdo();
于 2013-09-27T14:39:45.273 に答える