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();