如何解决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']);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。