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();

Ответы на вопрос(3)

Ваш ответ на вопрос