Сложное eloquent relation в laravel

Всем привет. Возник вопрос по eloquent relation в проекте на laravel 10. Допустим есть 3 таблицы:

  1. orders - таблица с данными заказов
    • id - id заказа
    • shop_id - id магазина, к которому относится заказ
  2. orders_products - таблица с данными товаров в заказах
    • order_id - id заказа
    • product_id - id товара
  3. 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 пока такое не умеет?


Ответы (0 шт):