/** * Allow to filter results by the search form * * @param Illuminate\Database\Query $query [description] * @param string $string The search query * @return lluminate\Database\Query [description] */ public function scopeSearchByInput($query, $string = '') { if ($string) { $searchable = self::getSearchableColums(); $query->where(function ($query) use($searchable, $string) { $string_parts = explode(" ", $string); foreach ($string_parts as $part) { $query->where(function ($query) use($searchable, $part) { foreach ($searchable as $column => $value) { $query->orWhere($column, 'like', '%' . $part . '%'); } }); } }); } return $query; }
/** * Scope Slug. * * @param Illuminate\Database\Query $query * @param string $slug Slug of the desired Service * * @return Illuminate\Database\Query Scoped query */ public function scopeSlug($query, $slug) { return $query->where('slug', '=', $slug)->get(); }
/** * Scope For Service * * @param Illuminate\Database\Query $query * @param Service $service Inquired Service to filter * @return Illuminate\Database\Query Scoped query */ public function scopeForService($query, Service $service) { return $query->where('service_id', '=', $service->id); }
/** * Between Dates. * * @param Illuminate\Database\Query $query * @param Carbon $startAt * @param Carbon $finishAt * * @return Illuminate\Database\Query */ public function scopeAffectingInterval($query, Carbon $startAt, Carbon $finishAt) { return $query->where(function ($query) use($startAt, $finishAt) { $query->where(function ($query) use($startAt, $finishAt) { $query->where('finish_at', '>=', $finishAt->timezone('UTC'))->where('start_at', '<=', $startAt->timezone('UTC')); })->orWhere(function ($query) use($startAt, $finishAt) { $query->where('finish_at', '<', $finishAt->timezone('UTC'))->where('finish_at', '>', $startAt->timezone('UTC')); })->orWhere(function ($query) use($startAt, $finishAt) { $query->where('start_at', '>', $startAt->timezone('UTC'))->where('start_at', '<', $finishAt->timezone('UTC')); })->orWhere(function ($query) use($startAt, $finishAt) { $query->where('start_at', '>', $startAt->timezone('UTC'))->where('finish_at', '<', $finishAt->timezone('UTC')); }); }); }
/** * Scope Affecting Humanresource. * * @param Illuminate\Database\Query $query * * @return Illuminate\Database\Query */ public function scopeAffectingHumanresource($query, $humanresourceId) { if (is_null($humanresourceId)) { return $query; } return $query->where('humanresource_id', $humanresourceId); }
/** * Scope only till date. * * @param Illuminate\Database\Query $query * @param Carbon $date Inquired range end date * * @return Illuminate\Database\Query Scoped appointments up to the inquired date */ public function scopeTillDate($query, Carbon $date) { return $query->where('start_at', '<=', $date->timezone('UTC')); }