Laravel 收集顺序类似于 DB FIELD

Laravel collection order similar to DB FIELD

我有一个订单查询

$query->orderByRaw("FIELD(type, 'red', 'green', 'aqua') ASC");

这将不按字母顺序排列项目,而是特别按价值排列。

有没有办法在 Laravel 集合中做同样的事情?

喜欢:

$collection = collect(`Items from DB`);

$final = $collection->sortBy(function($item){
    return $item->color == 'red'
});

找到解决方案:

$collection = collect(`Items from DB`);

$final = $collection->sortBy(function($model){
    return array_search($model->color, ['red', 'green', 'aqua']);
});

array_search return 项目位置(键),所以如果模型颜色是 red 键是 0 等等。这将订购它。

如果有其他解决方案(可能更快)请post他们,谢谢。