Laravel сортировка коллекции по нескольким полям - PullRequest
0 голосов
/ 07 апреля 2020

Я придерживался сортировки коллекции в laravel на основе различных ситуаций.

Для простоты приведен пример коллекции:

1;
 pmt: 1
 thm: 1
 customerFriendly: false
2;
 pmt: 1
 thm: 1
 customerFriendly: true
3;
 pmt: 2
 thm: 4
 customerFriendly: true

Мне нужно сначала отсортировать эту коллекцию на основе значение pmt. Самый низкий сначала. Если есть те же значения pmt, чем мне нужна вторая сортировка на основе значения thm. После этого, если, возможно, будет то же число, что и мне, нужно снова отсортировать его по логическому полю заказчика.

Таким образом, на основе приведенного выше примера окончательный отсортированный список должен быть 2,1,3

Насколько я могу, я могу сначала отсортировать список по pmt и, если thm найдет те же pmt-s, но я не могу отсортировать его по customerFriendly.

Вот мой код:

$pmtDuplicated = $this->checkDuplicates($transformedLoans, 'pmt');
                if ($pmtDuplicated) { //If we found same pmt-s sort by thm also
                    $secondSort = $transformedLoans->sortBy(function ($item) {
                        return $item->pmt . '-' . $item->thm;
                    })->values();

                    $thmDuplicatesInSecondSort = $this->checkDuplicates($secondSort, 'thm'); //Check again for same thm

                    if ($thmDuplicatesInSecondSort) { //If we found same thm sort by customerFriendly also
                        return $secondSort->sortBy('customerFriendly')->values();
                    } else {
                        return $secondSort;
                    }
                } else {
                    return $transformedLoans->sortBy('pmt')->values();
                }

Кто-то может мне помочь? Спасибо.

1 Ответ

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

Я нашел решение и оставляю его здесь, если кому-то нужна помощь позже.

Вместо этого раздела:

if ($thmDuplicatesInSecondSort) { //If we found same thm sort by customerFriendly also
                        return $secondSort->sortBy('customerFriendly')->values();
                    }

Мне нужно было использовать это:

if ($thmDuplicatesInSecondSort) { //Ha van THM alapján is egyezés akkor fogyasztóbarát alapján is rendezzen
                        return $secondSort->sortBy(function ($item) {
                            return $item->customerFriendly === false ? 1 : 0;
                        })->values();

}

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