Laravel: сортировка коллекции по фамилии в одну строку - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь отсортировать коллекцию, которая состоит из идентификаторов и полных имен, в алфавитном порядке по фамилии.Идентификатор исходит из родительского класса, а полное имя - от дочернего.

Я пытался разбить строку и упорядочить ее по фамилии, но не смог заставить ее правильно переупорядочить идентификаторы.Я пробовал как с sortBy при получении коллекции, так и с usort после ее получения

$testExaminers=TestExaminer::where('test_id',$request->testid)
->with('examiner')
->get()
->sortBy('examiner.name');

$result = array();
$num=0;
foreach($testExaminers as $testExaminer) {
            $result[$num]['id'] = (int) $testExaminer->examiner_id;
            $result[$num]['text'] = $testExaminer->examiner->name;
            $num++;
}

echo json_encode(['examiners'=>$result]);

Приведенный выше код прекрасно работает для сортировки по имени, но мне нужно отсортировать по фамилии.

пользователь вводит test_id, который выдает список «TestExaminers», у каждого есть свойство «examiner_id», связанное с уникальным «examiner», которое, в свою очередь, имеет имя «firstname middlename lastname».поэтому он должен выглядеть примерно так

до сортировки

$result = [[1,'Alpha Z. Goodman'],[2,'Joe Bman'],[3,'ZZ Top'],[4,'Joe Aman']]

после сортировки

$result = [[4,'Joe Aman'],[2,'Joe Bman'],[1,'Alpha Z. Goodman'],[3,'ZZ Top']]

Спасибо!

1 Ответ

0 голосов
/ 22 апреля 2019

Как насчет того, чтобы попробовать что-то подобное?

$testExaminers = TestExaminer::where('test_id', $request->testid)
    ->with('examiner')
    ->get()
    ->map(function ($item, $key) {
        $item->examiner->last_name = array_slice(explode(' ', $item->examiner->name), -1)[0];

        return $item;
    })
    ->sortBy('examiner.last_name');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...