Вы можете сделать это тремя способами:
- A) Вы можете применить его ко всем запросам.
- B) Или вы можете создать одну область в вашей модели и вызовите его по запросу.
- C) Или вы можете отсортировать его по своему запросу
A) Вы можете применить его ко всем запросам с помощью:
- Создайте новый файл области действия с адресом
/app/Scopes/SortByScope.php
Тогда этот файл (SortByScope.ph
p) должен выглядеть следующим образом:
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class SortByScope implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
$builder->orderBy('MyAttribute', 'DESC');
}
}
В вашей модели включите вызов в вашей голове
<?php
namespace App;
use App\Scopes\SortedOrderScope;
...rest of your model...
Включите фоллинг в вашу модель:
/**
* Apply to all queries.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::addGlobalScope(new SortByScope);
}
https://laravel.com/docs/master/eloquent#global -области
B) Или вы можете создать одну область в вашей модели и вызовите его по запросу:
- В вашей модели введите метод фоллинга:
/**
* Scope a query to be sorted by MyAttribute
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeSortedByMyAttribute($query)
{
$builder->orderBy('MyAttribute', 'DESC');
}
Затем в вашем Запросе используйте его с:
$results = App\MyModel::sortedByMyAttribute()->get();
-или-
$results = App\MyModel::where('foo', '=', 'bar')->sortedByMyAttribute();
https://laravel.com/docs/master/eloquent#local -области
C) Или вы можете сортировать по вашему запросу, используя:
$results = App\MyModel::orderBy('MyAttribute', 'DESC')->get();