/** * Returns products that are displayed in a given category * * @param \October\Rain\Database\Builder $query * @param \Bedard\Shop\Models\Category $category * @return \October\Rain\Database\Builder * * @todo Implement smart category logic */ public function scopeInCategory($query, Category $category) { // Hide out of stock products if ($category->is_hiding_out_of_stock) { $query->inStock(); } // Filtered categories $category->load('filters'); if ($category->filters->count() > 0) { return $query->where(function ($product) use($category) { foreach ($category->filters as $filter) { $product->where($filter->left, $filter->operator, DB::raw($filter->right)); } }); } else { return $query->whereHas('categories', function ($categories) use($category) { $categories->whereIn('id', $category->descendents()->lists('id')); }); } }