Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pplrPmMRHOT 186 of 252 menu
◀ ▶

Связь один к одному через в Laravel

Иногда нужная модель связана не напрямую, а через третью таблицу. Для связи один к одному через используют метод hasOneThrough.

Пусть есть механики, машины и владельцы. У механика одна машина, у машины один владелец. Механик и владелец напрямую не связаны, но владелец доступен через машину:

mechanics

  • id
  • name

cars

  • id
  • model
  • mechanic_id

owners

  • id
  • name
  • car_id

В модели механика пропишем отношение. Первый параметр - конечная модель, второй - промежуточная:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Mechanic extends Model { public function carOwner() { return $this->hasOneThrough( Owner::class, Car::class ); } } ?>

Теперь владельца можно получить так:

<?php $mechanic = Mechanic::find(1); $owner = $mechanic->carOwner; echo $owner->name; ?>

Сделайте таблицы authors, books и publishers. У автора одна книга, у книги один издатель. Свяжите автора с издателем через hasOneThrough.

Получите издателя для выбранного автора через отношение.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить