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

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

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

#### posts

- id
- title

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

#### thumbnails

- id
- path
- alt
- post_id

Таблица с миниатюрами связана с таблицей с постами через поле `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
- password

#### profiles

- id
- name
- surname
- email
- user_id

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

## Соглашения

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

←→
↑