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

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

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

Давайте посмотрим на примере. Пусть у нас есть следующая таблица с постами:

posts

  • id
  • title

Каждый пост имеет одну картинку-миниатюру. При этом картинки хранятся в отдельной таблице:

thumbnails

  • id
  • path
  • alt
  • post_id

Таблица с миниатюрами связана с таблицей с постами через поле post_id. Так как одному посту соответствует одна миниатюра, то у нас получается связь один к одному. Мы можем прописать эту связь в моделях наших таблиц. Toгда при получении поста вместе с ним автоматически будет получаться и миниатюра.

Давайте сделаем это. Создадим модель для миниатюр:

<?php class Thumbnail extends Model { } ?>

Создадим модель для постов:

<?php class Post extends Model { } ?>

Заюзаем в модели для постов модель для миниатюр:

<?php use App\Models\Thumbnail; class Post extends Model { } ?>

В модели для постов создадим метод thumbnail:

<?php class Post extends Model { public function thumbnail() { } } ?>

В этом методе свяжем наши модели через метод hasOne:

<?php class Post extends Model { public function thumbnail() { return $this->hasOne(Thumbnail::class); } } ?>

Сделайте следующие таблицы:

users

  • id
  • login
  • password

profiles

  • id
  • name
  • surname
  • email
  • user_id

Свяжите эти таблицы отношением hasOne.

Соглашения

Все связи в Laravel работают через соглашение: имена таблиц всегда даются во множественном числе, а поля связи - в единственном.

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