Как сортировать аксессоры в Laravel? - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть модель персонажа, в которой есть несколько аксессоров, которые подсчитывают некоторые предметы, связанные с этой моделью. Я не могу использовать orderby, потому что столбец не существует в БД и не может использовать sortby, потому что мы используем таблицы данных (с угловым значением). В postgres может быть возможно с боковым соединением, но я использую mysql. Есть ли другой способ сделать это? Accessors ex.

protected $appends = [
     "changes_count"
];

public function getChangesCountAttribute()
{
    return $this->changes()->where('type', 'Change')->count();
}

public function indexWithPagination(Request $request)
{
    //Sorting
    $column = isset($request->sortField) ? $request->sortField : null;
    $order_by = 'asc';
    if (isset($request->sortOrder)) {
        $order_by = $request->sortOrder === 1 ? 'asc' : 'desc';
    }

    $record = Character::with(Character::getRelationshipsArray());

    switch ($column) {
            case 'cast':
                $record->orderBy('character_number', $order_by);
                break;

            case 'changes_count':
                ??
                break;

            default:
                $record->orderBy($column, $order_by);
                break;
        }

        return getIndexWithPagination($record);
  }

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете отсортировать полученную коллекцию по аксессору, очевидно, запрос не может быть упорядочен, поскольку он не находится в БД.

$record->sortByDesc('changes_count'); // sort using collection method

// or ascending:
$record->sortBy('changes_count');

Вы можете добиться того же, используя объединения, если вы предпочитаете делатьэто в вызове БД (лучше с точки зрения производительности).

Справочный вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...