SQL
laravel
Eloquent
laravel5

[Eloquent]Union()で重複行があるのでdistinctしたい

処理の順番がおかしい可能性がある

現状

UNION_ALLと同じ
$first = DB::table('users')
    ->whereNull('first_name')
    ->get();

$users = DB::table('users')
    ->whereNull('last_name')
    ->get()
    ->union($first);

これだと、$firstと$userがそれぞれget()した形がunion()されるのでUNION ALLと同等になる。

改善

UNIONになる
$first = DB::table('users')
    ->whereNull('first_name');

$users = DB::table('users')
    ->whereNull('last_name')
    ->union($first)
    ->get();

クエリを持った状態でget()前にunionするため、UNION ALLとならない

thanks

UNION DISTINCT in laravel query builder - Stack Overflow