Привет был похожая проблема,
$final = $collection->sortBy(function($item){
return array_search($item->status, ['2', '1', '3']);
});
['2', '1', '3']
(Статус с номером 2 будет первым, потому что его клавиша позиции равна 0, просто измените порядок, как вам нужно.
Иливы можете создать array
как ['2' => 1, '1' => 2, '3' => 3]
использовать как return $arry_of_order[$item->status];
(быстрее, чем каждый раз вызывать array_search
)
PS Если вы можете использовать DB (MySql), как другиелюди здесь предложили, вы должны придерживаться этого, $query->orderByRaw("FIELD(status, '2', '1', '3')")
Для PostgreSQL смотрите здесь