class ProductFilter
{
private $requestData;
/**
* ProductFilter constructor.
* @param $requestData
*/
public function __construct($requestData)
{
$this->requestData = $requestData;
}
/**
* Returns a model from container
* @return mixed
*/
private function model()
{
return app(Product::class);
}
public function prepareCatalogFilterQuery()
{
$query = $this->model()->newQuery();
if(!empty($this->requestData['sort']) && !($this->requestData['sort_order'])) {
$query->orderBy($this->requestData['sort'], $this->requestData['sort_order']);
}
if(!empty($this->price_min) && intval($this->price_min) > 0 && !empty($this->price_max) && intval($this->price_max)) {
$query->whereBetween('price', [$this->price_min, $this->price_max]);
}
if(!empty($this->requestData['category']) && is_array($this->requestData['category'])) {
$query->with(['categories' => function($subQuery) {
$subQuery->whereIn('category_id', '=', $this->requestData['category']);
}]);
}
return $query;
}
}