php - 类似于 DB FIELD 的 Laravel 集合顺序

标签 php laravel laravel-5 eloquent laravel-collection

我有一个查询,顺序如下

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

这将不按字母顺序排列项目,而是按值(value)排序。

有没有办法在 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返回项目位置(键),因此如果模型颜色为 red,则键为 0,依此类推。这将订购它。

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

关于php - 类似于 DB FIELD 的 Laravel 集合顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47049954/

相关文章:

laravel - Auth::check() 在 Laravel 5.7 的中间件中总是错误的

php - Laravel 5.6 中未定义路由

exception - Laravel 4.2 至 5 类 'App\Http\Controllers\Controller' 未找到

php - 如何使用 perl/php/grep/etc 从 csv 中提取日期范围?

php - jQuery 使用 id 选择器返回错误值

Laravel Blade 指令添加额外的引号

php - Laravel 5.5 如何在 LaravelCollective 表单中使用 Foreach 循环

php - 你能在不使用 Laravel 5 在数据库中创建条目的情况下填充 Eloquent 模型吗

php - 来自 PHP/Apache2 的响应中缺少 CORS header

php - 我将要使用 goto 语句