Метод union
Метод union применяется к запросу Query Builder и позволяет объединить результаты двух или более запросов в один набор. Первым параметром передаётся другой запрос, который нужно объединить. По умолчанию дублирующиеся строки удаляются, но можно использовать метод unionAll для сохранения всех записей.
Синтаксис
<?php
use Illuminate\Support\Facades\DB;
DB::table('table1')->union($query2)->get();
?>
Пример
Давайте объединим результаты двух таблиц: users и admins:
<?php
use Illuminate\Support\Facades\DB;
$res = DB::table('users')
->select('name')
->union(
DB::table('admins')
->select('name')
)
->get();
foreach ($res as $user) {
echo $user->name . " ";
}
?>
Результат выполнения кода:
"John Doe Jane Smith Admin User"
Пример
Объединим результаты с сортировкой и ограничением:
<?php
use Illuminate\Support\Facades\DB;
$res = DB::table('users')
->select('name', 'email')
->where('active', 1)
->union(
DB::table('admins')
->select('name', 'email')
->where('active', 1)
)
->orderBy('name')
->limit(10)
->get();
foreach ($res as $user) {
echo $user->name . " ";
}
?>
Результат выполнения кода:
"Admin Admin John Jane"
Пример
Использование метода unionAll для сохранения дубликатов:
<?php
use Illuminate\Support\Facades\DB;
$res = DB::table('users')
->select('name')
->unionAll(
DB::table('admins')
->select('name')
)
->get();
foreach ($res as $user) {
echo $user->name . " ";
}
?>
Результат выполнения кода:
"John Jane John Jane Admin Admin"
Пример
Объединение нескольких запросов:
<?php
use Illuminate\Support\Facades\DB;
$res = DB::table('users')
->select('id', 'name')
->where('id', '>', 1)
->union(
DB::table('admins')
->select('id', 'name')
->where('id', '>', 1)
)
->union(
DB::table('moderators')
->select('id', 'name')
->where('id', '>', 1)
)
->orderBy('id')
->get();
foreach ($res as $user) {
echo $user->name . " ";
}
?>
Результат выполнения кода:
"John Jane Moderator Admin"