Есть таблица с товарами 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