Как отсортировать от высшего к низшему после суммы значение в Laravel? - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок в Laravel. Сейчас у меня возникают трудности с сортировкой имени ученика по возрастанию и убыванию на основе их общего количества баллов. Ниже приведены мои данные от Почтальона.

{ 
  "score": [
    {
        "name": "Adam",
        "sex": "male",
        "totalMarks": 250
    },
    {
        "name": "Lisa",
        "sex": "female",
        "totalMarks": 350
    },
    {
        "name": "Daniel",
        "sex": "male",
        "totalMarks": 300
    },
    {
        "name": "Mary",
        "sex": "female",
        "totalMarks": 330
    },
    {
        "name": "Sarah",
        "sex": "female",
        "totalMarks": 280
    }
  ]
}

Ниже приведен мой код от ScoreController. php

$class_id = $user->class->id;
$students = Students::whereIn('class_id', $class_id)->get();
$score = array();

foreach ($students as $student) {
   array_push($score, [
      'name' = $student->name,
      'sex' = $student->sex,
      'totalMarks' = $student->subjects->sum('mark'),
   ]);
}

return response()->json([
  'score' => $score,
]);

Я бы хотел отсортировать студента по сумме mark , Таким образом, студент с самым высоким totalMarks должен быть на вершине списка. Заранее спасибо.

1 Ответ

0 голосов
/ 01 апреля 2020

Использование атрибутов eloquent, вероятно, вам здесь поможет. В вашем классе учеников добавьте красноречивый мутатор .

class Students {
    // to include it in the response.
    $with = ['totalMarks'];

    public function getTotalMarksAttribute() {
        return $this->subjects->sum('mark');
    }
}

Теперь вы можете немного оптимизировать свой оригинальный код. При таком подходе вам не нужно преобразовывать ваши объекты в массив.

$students = Students::whereIn('class_id', $class_id)
    ->get()
    ->sortByDesc('totalMarks');

// laravel will automatic transform the objects, an way more maintainable approach
return response()->json([
  'score' => $students,
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...