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


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

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

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