У меня есть коллекция со следующими данными.
id | name | parent_id
1 | Category2 | null
2 | Element1 | 2
3 | Element3 | 1
4 | Category1 | null
5 | Element4 | 2
6 | Element1 | 1
Я хочу отсортировать так, чтобы сначала шла родительская, а потом за ней шли дочерние категории. Результат мне нужен примерно такой:
id | name | parent_id
1 | Category1 | null
3 | Element3 | 1
6 | Element1 | 1
4 | Category2 | null
5 | Element4 | 2
2 | Element1 | 2
Не получается написать callback функцию для метода sort (код ниже не работает):
$collection->sort(function (self $a, self $b) {
if (is_null($a->parent_id)) {
if (is_null($b->parent_id)) {
return $a->id > $b->id ? 1 : -1;
}
if ($a->id === $b->parent_id) {
return 1;
}
return $a->id < $b->parent_id ? 1 : -1;
}
if ($a->parent_id === $b->parent_id) {
return $a->id > $b->id;
}
return $a->parent_id > $b->parent_id ? 1 : -1;
})