Связь один к одному в 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);
}
}
?>