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