@vadim07

Как сделать выборку товаров c фильтрацией по связных таблицах при связи многие ко многим?

Есть таблица с товарами goods. Она связана с таблицей categories (многие ко многим), также с таблицей goods_filter_value (многие ко многим). Как сделать выборку при заданом alias категории и масива фильтров?
Сейчас делаю так:
protected function getProducts($alias, $filters = [])
    {
        $products = $this
            ->p_rep
            ->model
            ->select(
                'goods.name', 
                'goods.price',
                'goods.alias',
                'goods.discount_price',
                'goods.isNew', 
                'images.path'
                )
            ->join('images', 'goods.id', '=', 'images.product_id')
            ->join('goods_category', 'goods_category.product_id', '=', 'goods.id')
            ->join('categories', 'goods_category.category_id', '=', 'categories.id');

            if(count($filters) > 0 ){
                $products = $products->join('goods_filter_value', 'goods_filter_value.product_id', '=', 'goods.id')
                    ->join('values_filters', 'goods_filter_value.value_id', '=', 'values_filters.id')
                    ->whereIn('values_filters.id', $filters);
            }

            $products = $products->where('categories.alias', $alias)            
                ->where('images.isMain', 1)
                ->distinct()
                ->orderBy('goods.created_at', 'desc')
                ->paginate(\Config::get('settings.count_products_on_page'), ['goods.*']);

        return $products;
    }

проблема в том что когда я применяю больше фильтров, результатов становится больше а не наоборот +есть проблема с total в пагинации из за distinct
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

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