我有这个数组作为Laravel Collection:
"data": [
{
"id": 863368,
"reference": "Ref 1",
"status": 1
},
{
"id": 863391,
"reference": "Ref 2",
"status": 2
},
{
"id": 863390,
"reference": "Ref 3",
"status": 2
},
{
"id": 863396,
"reference": "Ref 4",
"status": 3
}
];
我需要按status
而不是asc
或desc
对其进行排序,但是状态为2
的记录应首先在列表上,然后状态为{ {1}},然后显示状态1
。
我不知道如何实现这一目标,在此先感谢您。
答案 0 :(得分:4)
你有类似的问题,
$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
)
P.S。如果您可以使用数据库(MySql)(如此处的其他建议),则应坚持使用$query->orderByRaw("FIELD(status, '2', '1', '3')")
对于PostgreSQL,请看here
答案 1 :(得分:3)
您可以使用orderByRaw
Model::orderByRaw('FIELD(status, 2, 1, 3)')->get();
还通过使用orderBy
Model::orderBy(DB::raw('FIELD(status, 2, 1, 3))'))->get();
答案 2 :(得分:0)
如果要从MySQL获取数据,则可以像这样更改ORDER BY:
ORDER BY FIELD(status, 2, 1, 3)