Laravel default orderBy
Есть ли чистый способ включить определенные модели в порядкедефолт? Это может сработать, расширивs QueryBuilder, но для этого выпридется перепрограммировать некоторые из нихОсновные черты - плохая практика.
причина
Главное в этом - одна из моих моделейs многократно используется многими другими, и сейчас вам приходится прибегать к порядку снова и снова. Даже при использовании для этого замыкания - вам все равно придется его называть. Было бы намного лучше иметь возможность применять сортировку по умолчанию, поэтому каждый, кто использует эту модель и не предоставляет пользовательских параметров сортировки, будет получать записи, отсортированные по умолчанию. Использование репозитория здесь не вариант, потому чтозагружен.
РЕШЕНИЕ
Расширение базовой модели:
protected $orderBy;
protected $orderDirection = 'ASC';
public function scopeOrdered($query)
{
if ($this->orderBy)
{
return $query->orderBy($this->orderBy, $this->orderDirection);
}
return $query;
}
public function scopeGetOrdered($query)
{
return $this->scopeOrdered($query)->get();
}
В вашей модели:
protected $orderBy = 'property';
protected $orderDirection = 'DESC';
// ordering eager loaded relation
public function anotherModel()
{
return $this->belongsToMany('SomeModel', 'some_table')->ordered();
}
В вашем контроллере:
MyModel::with('anotherModel')->getOrdered();
// or
MyModel::with('anotherModel')->ordered()->first();