РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
239 of 1392 menu

Метод leftJoin

Метод leftJoin применяется к запросу Query Builder и выполняет левое внешнее соединение с указанной таблицей. В отличие от метода join, который возвращает только совпадающие записи, leftJoin возвращает все записи из левой таблицы, даже если в правой таблице нет соответствующих записей. Первым параметром передаётся имя таблицы для соединения, вторым - условие соединения в виде строки или массива.

Синтаксис

<?php DB::table($table)->leftJoin($table2, $column1, $operator, $column2); ?>

Пример

Давайте выполним левое соединение таблиц 'users' и 'posts' по полю 'user_id':

<?php use Illuminate\Support\Facades\DB; $res = DB::table('users') ->leftJoin('posts', 'users.id', '=', 'posts.user_id') ->select('users.name', 'posts.title') ->get(); foreach ($res as $row) { echo $row->name . ' - ' . ($row->title ?? 'no posts'); } ?>

Результат выполнения кода:

"John - article 1" "John - article 2" "Mary - no posts" "Bob - article 3"

Как видно из результата, пользователь Mary включена в выборку, хотя у неё нет постов.

Пример

Давайте выполним левое соединение с несколькими условиями, используя массив:

<?php use Illuminate\Support\Facades\DB; $res = DB::table('products') ->leftJoin('orders', function ($join) { $join->on('products.id', '=', 'orders.product_id') ->where('orders.status', '=', 'active'); }) ->select('products.name', 'orders.quantity') ->get(); foreach ($res as $row) { echo $row->name . ' - ' . ($row->quantity ?? '0'); } ?>

Результат выполнения кода:

"laptop - 3" "mouse - 0" "keyboard - 7" "monitor - 0"

В этом примере мы используем замыкание для построения сложного условия соединения с дополнительной фильтрацией.

Пример

Давайте выполним левое соединение с использованием синтаксиса сокращённого условия:

<?php use Illuminate\Support\Facades\DB; $res = DB::table('authors') ->leftJoin('books', 'authors.id', 'books.author_id') ->select('authors.name', 'books.title') ->get(); foreach ($res as $row) { echo $row->name . ' - ' . ($row->title ?? 'no books'); } ?>

Результат выполнения кода:

"Tolkien - The Lord of the Rings" "Tolkien - The Hobbit" "Rowling - Harry Potter" "King - no books"

Сокращённый синтаксис предполагает, что оператор сравнения - это равенство '='.

Пример

Давайте выполним левое соединение с использованием сырых выражений для более сложных условий:

<?php use Illuminate\Support\Facades\DB; $res = DB::table('employees') ->leftJoin('departments', DB::raw('employees.dept_id'), '=', DB::raw('departments.id')) ->select('employees.name', 'departments.name as dept_name') ->get(); foreach ($res as $row) { echo $row->name . ' works in ' . ($row->dept_name ?? 'no department'); } ?>

Результат выполнения кода:

"Anna works in IT" "Peter works in HR" "Maria works in no department" "John works in IT"

Использование DB::raw позволяет применять функции базы данных или сложные выражения в условиях соединения.

Смотрите также

  • метод join,
    который выполняет внутреннее соединение таблиц
  • метод rightJoin,
    который выполняет правое внешнее соединение
  • метод select,
    который указывает поля для выборки
  • метод get,
    который выполняет запрос и возвращает коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить