Laravel Collection - 将特定项目放在最后一个位置

问题描述

我有具有不同角色的数据库表,我需要收集角色为 owner 的项目将放在最后。这是数据库示例:

ID 角色
1 管理员
2 用户
3 用户
4 所有者
5 用户

如何使用这些数据对集合进行排序以获取角色为 owner 的项目作为最后一个?我只能想到按字母顺序对其进行排序,保存到某个变量并从集合中删除具有所有者角色的记录,然后将其作为最后粘贴到集合中。但对我来说似乎不必要地复杂,难道没有更简单的方法吗?

我需要这个的原因是因为我需要删除所有选定的用户并确保用户/所有者是最后一个

解决方法

您可以使用条件渲染。为此,您需要使用 DB::raw 示例:

Model::select('id','role')
  ->orderBy(DB::raw('role = "owner"'),'ASC');

或使用速记:

Model::select('id','role')->orderByRaw("role = 'owner' ASC");

它会将 owners 放在最后。

在这里检查小提琴:http://sqlfiddle.com/#!9/9d2b64/2

,

对于 eloquent,您可以将 sortBy() 方法与 array_search() 一起使用:

$collection = Model::get();

$data = $collection->sortBy(function($item){
    return array_search($item->role,['admin','user','owner']);
});

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...