«One of Many» для Laravel
Начиная с версии 8.42, Laravel стал поддерживать новые Eloquent-отношения «Один из многих» («One of Many»). Давайте посмотрим, как это реализовано.
В первую очередь стоит сказать, что новшество появилось благодаря вот этому пул-реквесту.
Вообще, само по себе отношение Один-из-многих позволяет создавать связь Один-к-одному из отношений Один-ко-многим. К примеру:
• «первый вход в систему»; • «последний вход в систему»; • цена на продукт (получение актуальной цены товара).
На практике все это реализуется фильтрацией пересечения отношений, которые заджоинены сами с собой. Давайте покажем это на примере запроса из пул-реквеста:
В нашем примере модель User характеризуется множеством входов в систему. Ниже — код, задающий отношения Один-из-многих:
Еще ниже — интерфейс, который связан с ofMany:
При этом пул-реквест состоит из 2-х вспомогательных методов, что обеспечивает большую выразительность:
Получить дополнительную информацию можете по ссылке на сам пул-реквест. В частности, в описании вы найдете недостатки применения hasOne для данного типа отношений, то есть нужно понимать, когда стоит применять этот тип отношений, а когда нет. Есть и примеры с
Источник: https://laravel-news.com/one-of-many-eloquent-relationship.