лучший подход для поиска из сводной таблицы с использованием Laravel - PullRequest
0 голосов
/ 17 января 2019

Поиск по сводной таблице с использованием laravel.

Вот моя структура таблицы:

Product
id
name

Categories
id
name

product_category (Pivot table)

id
category_id
product_id

//products can have multiple categories 

Модель товара:

public function categories(){
     return $this->belongsToMany(Category::class, 'product_category');
}

Каков наилучший способ поиска всех товаров по идентификатору категории? В настоящее время я делаю это, и это кажется неэффективным способом:

//Controller
$categories = product_category::where('category_id',1)->get();

Теперь я должен пройтись по категориям, а затем получить Продукты и передать их на просмотр? Есть идеи, как сделать это эффективно?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Для этого вы можете использовать метод whereHas () :

$categoryId = 1;

$products = Product::whereHas('categories', function ($query) use($categoryId) {
    $query->where('id', $categoryId);
})->get();    

Выше будут возвращены все товары из категории, где идентификатор равен $categoryId.

0 голосов
/ 17 января 2019

Вы можете нетерпеливо загрузить товары для данной категории. Попробуйте:

$category = Category::with('products')->where('category_id',1)->find(1);

Когда вы сделаете это, будут выполнены только 2 запроса к базе данных: один для загрузки категории и один для загрузки связанных продуктов.

Тогда в вашем режиме просмотра Blade вы можете сделать:

@foreach($category->products as $product
    {{ $product->name }}
@endforeach
...