Пытаюсь подумать о альтернативных способах получения того, что мне нужно от моего API.
Я использую Laravel Spark и задаю запрос следующим образом:
$team = Team::with('users')->find($id);
Отношение пользователей к модели Team:
public function users() { return $this->belongsToMany( 'App\User', 'team_users', 'team_id', 'user_id' )->withPivot('role')->orderBy('current_active_team', 'DESC'); }
В настоящее время я заказываю это по полю в таблице users, но я также хочу заказать методом в модели Users:
public function queueLength() { // returns an integer for the users queue length }
Чтобы вернуть эти данные, я добавляю это по моему запросу:
foreach ($team->users as $user) { $user->queueLength = $user->queueLength(); }
Есть ли способ упорядочить пользователей $ team-> их queueLength?
Одним из решений будет использование коллекции sortBy
.
Сначала сделайте queueLength как атрибут.
public function getQueueLengthAttribute() { // returns an integer for the users queue length }
Затем используйте коллекцию sortBy
$team->users->sortBy('queueLength');
PS: это не будет хорошей идеей, если у вас есть огромный объем данных или использование разбивки на страницы.