Как использовать orderBy () с методом модели в Laravel - PullRequest
0 голосов
/ 23 ноября 2018

Как я могу использовать orderBy для заказа по методу модели?

Рассмотрим пользователя модели и метод

public function fullName() {
    return $this->firstName . $this->lastName;
}

Я хочу сделать что-то вроде orderBy ('fullName').Это возможно?Я знаю, что могу создать эквивалентный код с помощью Query Builder, но я хочу сохранить свои методы Model такими, какие они есть.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Я решил проблему с помощью этого решения:

$sorted = User::get()
    ->sortBy('full_name')  //appended attribute
    ->pluck('id')
    ->toArray();

$orderedIds = implode(',', $sorted);

$result = DB::table('user')
    ->orderByRaw(\DB::raw("FIELD(id, ".$orderedIds." )"))
    ->paginate(10);

Я добавил атрибут fullName к модели, который будет использоваться sortBy.Благодаря этому решению я смог использовать orderBy для упорядочения по добавленному атрибуту модели, именно то, что я хотел сделать.Так что да, это возможно.А также я смог использовать нумерацию страниц.Спасибо всем, кто пытался помочь.

0 голосов
/ 23 ноября 2018

Я думаю, у вас есть несколько вариантов:

  1. Создайте представление в вашей базе данных, которое имеет столбец fullName.Затем измените модель, чтобы использовать представление.
  2. Создайте вычисляемый столбец fullName, чтобы при вставке использовать значения, заданные из firstName и lastName.
  3. Использовать класс Collection Laravel.Этот класс предоставляет метод sortBy, в котором вы можете использовать атрибуты.

Если вы используете вариант 2, сначала определите атрибут:

public function getFullNameAttribute()
{
    return $this->firstName . $this->lastName;
}

Затем используйте коллекцию Laravel:

$items = Model::all()->sortBy('FullName');

Примечание : опция по умолчанию для sortBy - восходящая, поэтому если вы хотите отсортировать по убыванию:

$items = Model::all()->sortByDesc('FullName');

Подробнее о методах доступа можно прочитать здесь:https://laravel.com/docs/5.7/eloquent-mutators#defining-an-accessor

...