/** * Allows all columns on the current database table to be sorted through * query scope * * @param Illuminate\Database\Eloquent\Builder $query * @param string|array $field * if array: * e.g ['created_at' => 'desc'] * ['created_at' => 'desc', 'id' => 'asc'] * ['created_at' => 'desc', 'id' => 'asc', 'name' => 'asc'] * @param string $sort desc|asc * @return Illuminate\Database\Eloquent\Builder */ public function scopeSort($query, $field = NULL, $sort = NULL) { if (!empty($field) && is_array($field)) { foreach ($field as $sort => $direction) { /* * Return the query sorted */ $query->orderBy($sort, $direction); } return $query; } /* * Make sure both the field and sort variables are present */ if (is_string($field) && is_string($sort)) { /* * Make sure the sort input is equal to asc or desc */ if (strtolower($sort) === 'asc' || strtolower($sort) === 'desc') { /* * Return the query sorted */ return $query->orderBy($field, strtoupper($sort)); } } }
/** * Order the query by given column and director or by * defaults if no arguments given. * * @param Illuminate\Database\Eloquent\Builder $query * @return Illuminate\Database\Eloquent\Builder */ public function scopeOrder($query, $order = null) { $direction = 'desc'; $column = $this->defaultOrderColumn; if ($order) { //split string (created_atAsc) by camelCase into column and direction $s = preg_split('/(?=[A-Z])/', $order); //if we've got direction overwrite default one if (isset($s[1])) { $direction = strtolower($s[1]); } //if we've got column overwrite default one if (isset($s[0])) { $column = $s[0]; } } return $query->orderBy($column, $direction); }
/** * Filter for the join tables in read(). * TODO: manage the field datetime * * @author Luca Brognara * @date December 2015 * * @param Illuminate\Database\Eloquent\Builder $query * @param array $filters * @param array $columns * * @return array */ protected function filter($query, $filters, $columns) { foreach ($filters as $key => $filter) { $fields_exploded = explode('.', $filter['field']); if (count($fields_exploded) > 1) { $field_name = $fields_exploded[1]; // explode() necessary, because value in the form "table.field" } else { $field_name = $filter['field']; } $field_name = explode('.', $filter['field'])[1]; // explode() necessary, because value in the form "table.field" // if the field exist in the table if (in_array($field_name, $columns)) { switch (isset($filter['like']) ? $filter['like'] : 0) { case 0: default: // field == value $query->where($field_name, $filter['value']); break; case 1: // field == value% $query->where($field_name, 'LIKE', $filter['value'] . '%'); break; case 2: // field == %value $query->where($field_name, 'LIKE', '%' . $filter['value']); break; case 3: // field == %value% $query->where($field_name, 'LIKE', '%' . $filter['value'] . '%'); break; } } else { throw new \Exception('invalidFilters', 400); } } return true; }
/** * Includes the required relations in the query builder. * * @todo Find a way to apply accessors through this method. * * @param Illuminate\Database\Eloquent\Builder $query * @param string|array|Illuminate\Support\Collection $embed * @return Illuminate\Database\Eloquent\Builder */ public function scopeEmbed($query, $embed) { // Relations and accessors to append. $separator = isset($this->embedSeparator) ? $this->embedSeparator : ','; $attributes = is_string($embed) ? @explode($separator, $embed) : (array) $embed; // Extract the accessors from the list of attributes. $embedable = isset($this->embedable) ? $this->embedable : []; $accessors = array_intersect(array_keys($embedable), $attributes); // Extract the relations from the list of attributes. $relations = array_filter(array_diff($attributes, array_keys($embedable))); // If the accessors require any relation, add them to the list. foreach ($accessors as $accessor) { // Performance check. if (empty($embedable[$accessor])) { continue; } $relations = array_merge($relations, $embedable[$accessor]); } // Remove duplicates. $relations = array_unique($relations); // TODO: Temporarily set "appends" array to embedable accessors. return $query->with($relations); }
/** * Returns popular actors. * * @param Illuminate\Database\Eloquent\Builder $query * @return collection */ public function scopePopular($query) { return $query->orderBy('views', 'desc')->limit(6)->get(); }
/** * Fetches all information about series. * * @param Illuminate\Database\Eloquent\Builder $query * @return collection */ public function scopeSeries($query, $id) { return $query->where('id', '=', $id)->with('Season.Episode')->first(); }
function apply_filters(Illuminate\Database\Eloquent\Builder $query, $filters = '') { parse_str($filters, $filters); foreach ($filters as $filter => $value) { if ('' == $value or ';' == $value or '[]' == $value) { continue; } //resetting dependencies // if ('type'==$filter or 'commercial'==$filter) { // $filters = reset_dependencies($filters); // } $type = detect_filter_type($value); if ('check' == $type) { $query->where($filter, 1); } else { if ('list' == $type) { $list = trim($value, '[]'); $items = explode(';', $list); $query->whereIn($filter, $items); } else { if ('range' == $type) { $range = explode(';', $value); $query->where($filter, '>=', $range[0])->where($filter, '<=', $range[1]); } else { if ('type' == $type) { /*------------------------------------------------ | JOIN DEPENDENCIES ------------------------------------------------*/ if ('town_id' == $filter) { $filter = 'towns.town_id'; } if ('district_id' == $filter) { $filter = 'districts.district_id'; } /*----------------------------------------------*/ $query->where($filter, $value); } } } } } return $query; }
/** * Returns all news items paginated. * * @param Illuminate\Database\Eloquent\Builder $query * @return collection */ public function scopeNewsIndex($query) { return $query->orderBy('created_at', 'desc')->paginate(20); }
/** * Order by the data_order param * * @param Illuminate\Database\Eloquent\Builder $query * @param string $order Order direction * @return Illuminate\Database\Eloquent\Builder $query */ public function scopeByOrder($query, $order = 'desc') { $query->orderBy('data_order', $order); return $query; }
protected function makeQuery($model) { $query = new \Illuminate\Database\Eloquent\Builder(new \Illuminate\Database\Query\Builder(m::mock('Illuminate\\Database\\ConnectionInterface'), m::mock('Illuminate\\Database\\Query\\Grammars\\Grammar'), m::mock('Illuminate\\Database\\Query\\Processors\\Processor'))); $query->setModel($model); return $query; }
/** * Scope to get a record by a particular code. * * @param Illuminate\Database\Eloquent\Builder $query * @param string $code * @return Illuminate\Database\Eloquent\Builder */ public function scopeWithCode($query, $code) { return $query->where('code', $code); }
/** * Returns recent reviews. * * @param Illuminate\Database\Eloquent\Builder $query * @return collection */ public function scopeRecent($query) { return $query->orderBy('created_at', 'desc')->limit(6)->get(); }
public function scopeForUser(Illuminate\Database\Eloquent\Builder $query, $userId) { return $query->join('users_companies', 'users_companies.company_id', '=', 'checks.company_id')->where(function ($query) use($userId) { $query->where('users_companies.user_id', '=', $userId)->orWhere('checks.user_id', '=', $userId); }); }
/** * ordina i risultati della query in base a parametri in formato json "{"titolo":1,"tecnica":-1}" * @param Illuminate\Database\Eloquent\Builder $query * @param string $sortOptions una stringa formato json con i parametri per l'ordinamento */ public function scopeSortBy($query, $sortOptions = '{}') { if (is_null($sortOptions)) { return $query; } if (!is_array($sortOptions)) { $sortOptions = json_decode($sortOptions); } foreach ($sortOptions as $column => $direction) { $direction = $direction == -1 ? 'desc' : 'asc'; $query->orderBy($column, $direction); } return $query; }
/** * Returns paginated titles for series page index. * * @param Illuminate\Database\Eloquent\Builder $query * @return collection */ public function scopeSeriesIndex($query, $perPage = 36) { return $query->where('type', '=', 'series')->orderBy(Helpers::getOrdering(), 'desc')->paginate($perPage); }
public function scopeForUser(Illuminate\Database\Eloquent\Builder $query, $userId) { return $query->select('companies.*')->join('users_companies', 'users_companies.company_id', '=', 'companies.id')->where('users_companies.user_id', '=', $userId); }
/** * Returns actor model by actors name. * * @param Illuminate\Database\Eloquent\Builder $query * @return collection */ public function scopeByName($query, $name) { return $query->where('name', '=', $name)->firstOrFail(); }
/** * Fetches all episodes for series. * * @param Illuminate\Database\Eloquent\Builder $query * @param int $id series id indb * @param int $num season number * @return collection */ public function scopeEpisodes($query, $id, $num) { return $query->where('title_id', '=', $id)->whereNumber($num)->get(); }
/** * 复用的以审核通过的用户范围. * * @param Illuminate\Database\Eloquent\Builder $query 查询器 * * @return Illuminate\Database\Eloquent\Builder 查询器 * * @author Seven Du <*****@*****.**> * @datetime 2016-04-15T23:33:11+0800 * @homepage http://medz.cn */ public function scopeAudit($query) { return $query->where('is_audit', '=', 1); }
public function scopeSearch(Illuminate\Database\Eloquent\Builder $query, $str) { return $query->where('title', 'like', '%' . $str . '%')->orWhere('artist', 'like', '%' . $str . '%'); }
/** * This scope allows to retrive users with an specific permission * @param Illuminate\Database\Eloquent\Builder $query * @param string $permission * @return Illuminate\Database\Eloquent\Builder */ public function scopeWherePermissionIs($query, $permission = '') { return $query->whereHas('permissions', function ($permissionQuery) use($permission) { $permissionQuery->where('name', $permission); }); }
/** * This is an unused Scope * Not required anymore due to route model binding * * @param Illuminate\Database\Eloquent\Builder $query * @param string $user * @return Illuminate\Database\Eloquent\Builder */ public function scopeFindUser($query, $user) { return $query->whereProfileLink($user); }