Сложное eloquent relation в laravel
Всем привет. Возник вопрос по eloquent relation в проекте на laravel 10. Допустим есть 3 таблицы:
- orders - таблица с данными заказов
- id - id заказа
- shop_id - id магазина, к которому относится заказ
- orders_products - таблица с данными товаров в заказах
- order_id - id заказа
- product_id - id товара
- remainings - таблица с остатками товаров на дату в разрезе магазинов
- date - дата
- shop_id - id магазина
- product_id - id товара
- remaining - остаток
Вопрос: какое отношение нужно написать в классе OrdersProduct, чтобы получить остаток по product_id, shop_id (через таблицу orders) и на самую позднюю дату? Пробовал через hasOneTrough:
public function remainings(): HasOneThrough
{
return $this->hasOneThrough(Remaining::class, Order::class, 'id', 'shop_id', 'order_id', 'shop_id')->whereProductId($this->product_id)->latest('date');
}
но тогда на каждый вызов этого метода происходит отдельный подзапрос к БД, хотелось бы по "правильному" загрузить все данные через отношение. Или laravel пока такое не умеет?