Laravel 11 Eloquent UNION Query

In Laravel 11, you can use the Eloquent query builder to perform a UNION query, which combines the results of two or more queries without duplicates.

1. Using Query Builder with UNION

You can use `union()` to merge results from two queries.

use Illuminate\Support\Facades\DB;

$users1 = DB::table('users')->select('id', 'name', 'email')->where('status', 'active');
$users2 = DB::table('users')->select('id', 'name', 'email')->where('role', 'admin');

$users = $users1->union($users2)->get();

Explanation:

– The first query selects active users.
– The second query selects admin users.
– The `union()` merges the results without duplicates.

2. UNION with ORDER BY

$users1 = DB::table('users')->select('id', 'name', 'email')->where('status', 'active');
$users2 = DB::table('users')->select('id', 'name', 'email')->where('role', 'admin');

$users = $users1->union($users2)->orderBy('name')->get();

Note: `orderBy()` must be applied after the `union()`.

3. UNION ALL (Include Duplicates)

If you want to include duplicate results, use `unionAll()` instead of `union()`.

$users = $users1->unionAll($users2)->get();

4. UNION in Eloquent Models

Eloquent itself does not directly support `union`, so you need to use the query builder inside Eloquent models:

$users1 = User::select('id', 'name', 'email')->where('status', 'active');
$users2 = User::select('id', 'name', 'email')->where('role', 'admin');

$users = $users1->union($users2)->get();