Метод join
Метод join применяется к запросу Query Builder
и возвращает тот же запрос, дополненный условием
объединения таблиц. Первым параметром передаётся
имя таблицы для объединения, вторым - колонка из
первой таблицы, третьим - оператор сравнения,
четвёртым - колонка из второй таблицы. Если оператор
не указан, используется равенство.
Синтаксис
<?php
DB::table($table)->join($joinTable, $firstColumn, $operator, $secondColumn);
?>
Пример
Давайте выполним объединение таблиц 'users'
и 'posts' по колонке '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 $row) {
echo $row->name . ' - ' . $row->title . "\n";
}
?>
Результат выполнения кода:
"John Doe - First post"
"John Doe - Second post"
"Jane Smith - 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.active', '=', 1);
})
->select('orders.id', 'customers.name')
->get();
foreach ($res as $row) {
echo "Order {$row->id} - {$row->name}\n";
}
?>
Результат выполнения кода:
"Order 1 - Active customer"
"Order 3 - Active customer"
Пример
Давайте выполним множественное объединение трёх таблиц:
<?php
use Illuminate\Support\Facades\DB;
$res = DB::table('users')
->join('posts', 'users.id', '=', 'posts.user_id')
->join('comments', 'posts.id', '=', 'comments.post_id')
->select('users.name', 'posts.title', 'comments.text')
->limit(5)
->get();
foreach ($res as $row) {
echo "{$row->name}: {$row->title} - {$row->text}\n";
}
?>
Результат выполнения кода:
"John Doe: First post - Great article"
"John Doe: First post - Thanks for sharing"
"John Doe: Second post - I like this"
"Jane Smith: Third post - Very useful"