예제 #1
0
 /**
  * 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'));
         });
     }
 }