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

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

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

$tastr$> posts id title -tastr->

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

$tastr$> thumbnails id path alt post_id -tastr->

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

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

<?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); } } ?>

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

$tastr$> users id login password -tastr->
$tastr$> profiles id name surname email user_id -tastr->

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

Соглашения

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



Чат с GPT Компилятор