@kostik34

Как оптимизировать запрос на выборку в Laravel5 (многие ко многим)?

Всем привет. Есть три таблицы: Товары (id, name), Магазины (id, name), Цены(id, price). В моделях связи
Товары
public function price()
    {
        return $this->belongsToMany('App\Models\Price');
    }

Магазины
public function price()
    {
        return $this->belongsToMany('App\Models\Price');
    }

Цены
public function shop()
    {
        return $this->belongsToMany('App\Models\Shop');
    }
    public function product()
    {
        return $this->belongsToMany('App\Models\Product');
    }

Добавил 2 pivot таблицы price-product и price_shop

Я хочу вывести все цены для одного товара в виде
Товар
название_магазина -> цена
....
название_магазина -> цена

Для этого я делаю
$product = Product::find($id);

$prices = $product->price;

foreach($prices as $price) {
$shops[$price->id][$price->price] = $price->shop[0]->name;
}
и передаю массив $shops в wiev.

Все работает как надо. Но, слишком большое кол-во запросов к бд. Получается, сколько товаров, столько запросов. Возможно ли что-либо изменить чтоб уменьшить кол-во запросов?
  • Вопрос задан
  • 477 просмотров
Решения вопроса 1
Denormalization
@Denormalization
$product = Product::with(['price', 'price.shop'])->where('id', $id)->first();

Подгрузит все данные группами (через IN).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы