Метод join
Метод join применяется к запросу Query Builder
и позволяет объединить основную таблицу с дополнительной
по указанному условию. Первым параметром передаётся
имя таблицы для объединения, вторым - первая колонка,
третьим - оператор сравнения, четвёртым - вторая колонка.
Если оператор не указан, используется равенство.
Синтаксис
<?php
DB::table($table)
->join($table2, $column1, $operator, $column2)
->select(...)
->get();
?>
Пример
Объединим таблицу пользователей с таблицей постов
по полю 'user_id':
<?php
use Illuminate\Support\Facades\DB;
$res = DB::table('users')
->join('posts', 'users.id', '=', 'posts.user_id')
->select('users.name', 'posts.title')
->get();
foreach ($res as $item) {
echo $item->name . ' - ' . $item->title . "\n";
}
?>
Результат выполнения кода:
"John - First post"
"John - Second post"
"Jane - Third post"
Пример
Объединим таблицы с дополнительным условием через массив:
<?php
use Illuminate\Support\Facades\DB;
$res = DB::table('orders')
->join('customers', function ($join) {
$join->on('orders.customer_id', '=', 'customers.id')
->where('customers.status', '=', 'active');
})
->select('orders.id', 'customers.name')
->get();
foreach ($res as $item) {
echo $item->id . ' - ' . $item->name . "\n";
}
?>
Результат выполнения кода:
"1 - Alice"
"3 - Bob"
"5 - Charlie"
Пример
Используем левое объединение с помощью
метода leftJoin:
<?php
use Illuminate\Support\Facades\DB;
$res = DB::table('products')
->leftJoin('categories', 'products.category_id', '=', 'categories.id')
->select('products.name', 'categories.title')
->get();
foreach ($res as $item) {
echo $item->name . ' - ' . ($item->title ?? 'null') . "\n";
}
?>
Результат выполнения кода:
"Laptop - Electronics"
"Phone - Electronics"
"Chair - Furniture"
"Tablet - null"