Количество товара в фильтрах. Laravel, sql(inner join)

Есть фильтры в КАТЕГОРИЯХ, которые применяются через ajax. Мне нужно, чтобы подсчитывалось в фильтрах количество товара после применения. Есть таблица product с полем brand_id и есть таблица brend с брендами. Вот контроллер:

$m = Category::where('link_url', $id)->where('parent_id', '!=', 0)->firstOrFail();
$categories = Catshop::where('podcat', $m->id)->orwhere('podpodcat', $m->id)->get();
$this->categoryIds = $categories->pluck('product_id');
$product = Product::where('product.status', 1)->select('product.*', 'weight.price')->groupBy('product.id');
$this->applyFilter($product);

Вариант первый(тут выводятся только те фильтры, в которых есть товары, работает корректно):

 ...
 //Количество я получаю в `filter_count` 
 $brand = Brend::join('product', 'product.brand_id', '=', 'brend.id')
   ->select('brend.*', DB::raw('COUNT(product.id) as filter_count'))
   ->orderBy('brend.title')
   ->groupBy('brend.id');

   $this->applyFilter($brand);
   $brand = $brand->get();
   ...
   private function applyFilter($model)
  {
    if($this->request->brand){
        $model->whereIn('product.brand_id', $this->request->brand);
    }
  }

Вариант второй (мне нужно, чтобы там, где нет товаров - показывался 0):

$brand = Brend::select('brend.id', 'brend.title', 'brend.h1', DB::raw(
     '(SELECT COUNT(*) FROM product
        INNER JOIN catshop ON product.id = catshop.product_id
        WHERE product.brand_id = brend.id  AND catshop.product_id IN (.ТУТ НЕ ЗНАЮ КАК.)) as filter_count'
     ))
 ->groupBy('brend.id')
 ->get();
 //Данный код не работает корректно, сейчас показывается общее количество, не знаю как сделать, чтобы определенной категории показывалось.

Есть предположения как сделать? Может по другому как-то...


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