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

Метод rightJoin

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

Синтаксис

<?php use Illuminate\Support\Facades\DB; DB::table('table1') ->rightJoin('table2', $column1, $operator, $column2) ->get(); ?>

Пример

Давайте выполним правое соединение таблиц users и profiles для получения всех профилей с данными пользователей:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; class UserController extends Controller { public function index() { $res = DB::table('users') ->rightJoin('profiles', 'users.id', '=', 'profiles.user_id') ->select('users.name', 'profiles.bio', 'profiles.avatar') ->get(); foreach ($res as $row) { echo $row->name . ' - ' . $row->bio; } } } ?>

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

"John - Developer" "Mary - Designer" " - Artist" "Tom - Manager"

В результате запроса все профили были получены, даже те, которые не имеют связанного пользователя (поле name для такого профиля будет равно NULL).

Пример с несколькими условиями

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

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; class OrderController extends Controller { public function index() { $res = DB::table('orders') ->rightJoin('customers', function ($join) { $join->on('orders.customer_id', '=', 'customers.id') ->where('customers.status', '=', 'active'); }) ->select('customers.name', 'orders.total') ->get(); foreach ($res as $row) { echo $row->name . ' - ' . $row->total; } } } ?>

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

"Alice - 150.00" "Bob - 200.50" "Charlie - 300.00" "David - 450.75" "Eva - " "Frank - "

В результате все активные клиенты были получены с суммой их заказов. Клиенты без заказов также отображаются с пустым полем total.

Пример с использованием DB::raw

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

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; class ProductController extends Controller { public function index() { $res = DB::table('products') ->rightJoin('categories', 'products.category_id', '=', 'categories.id') ->select( 'categories.name as category', DB::raw('COUNT(products.id) as product_count'), DB::raw('AVG(products.price) as avg_price') ) ->groupBy('categories.id', 'categories.name') ->get(); foreach ($res as $row) { echo $row->category . ' - ' . $row->product_count . ' - ' . $row->avg_price; } } } ?>

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

"Electronics - 5 - 450.00" "Books - 3 - 25.50" "Clothing - 0 - " "Food - 2 - 15.75" "Furniture - 0 - "

В результате отображаются все категории, даже те, которые не имеют товаров (количество продуктов равно 0).

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

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