Связь один к одному - это когда одна запись одной таблицы соответствует одной записи другой таблицы.
Давайте посмотрим на примере. Пусть у нас есть следующая таблица с постами:
posts
- id
Каждый пост имеет одну картинку-миниатюру. При этом картинки хранятся в отдельной таблице:
thumbnails
- id
- path
- alt
Таблица с миниатюрами связана с таблицей
с постами через поле 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);
}
}
?>
Сделайте следующие таблицы:
users
- id
- login
profiles
- id
- name
- surname
Свяжите эти таблицы отношением hasOne
.
Соглашения
Все связи в Laravel работают через соглашение: имена таблиц всегда даются во множественном числе, а поля связи - в единственном.