Пример #1
0
 /**
  * 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));
         }
     }
 }
Пример #2
0
 /**
  * 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);
 }
Пример #3
0
 /**
  * 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;
 }
Пример #4
0
 /**
  * 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);
 }
Пример #5
0
 /**
  * Returns popular actors.
  * 
  * @param  Illuminate\Database\Eloquent\Builder $query 
  * @return collection
  */
 public function scopePopular($query)
 {
     return $query->orderBy('views', 'desc')->limit(6)->get();
 }
Пример #6
0
 /**
  * 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();
 }
Пример #7
0
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;
}
Пример #8
0
 /**
  * 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);
 }
Пример #9
0
 /**
  * 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;
 }
Пример #10
0
 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;
 }
Пример #11
0
 /**
  * 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);
 }
Пример #12
0
 /**
  * Returns recent reviews.
  * 
  * @param  Illuminate\Database\Eloquent\Builder $query 
  * @return collection
  */
 public function scopeRecent($query)
 {
     return $query->orderBy('created_at', 'desc')->limit(6)->get();
 }
Пример #13
0
 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);
     });
 }
Пример #14
0
 /**
  * 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;
 }
Пример #15
0
 /**
  * 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);
 }
Пример #16
0
 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);
 }
Пример #17
0
 /**
  * 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();
 }
Пример #18
0
 /**
  * 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();
 }
Пример #19
0
 /**
  * 复用的以审核通过的用户范围.
  *
  * @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);
 }
Пример #20
0
 public function scopeSearch(Illuminate\Database\Eloquent\Builder $query, $str)
 {
     return $query->where('title', 'like', '%' . $str . '%')->orWhere('artist', 'like', '%' . $str . '%');
 }
Пример #21
0
 /**
  * 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);
     });
 }
Пример #22
0
 /**
  * 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);
 }