Laravel Collection - 将特定项目放在最后位置
Laravel Collection - put specific item on last position
我有具有不同角色的数据库 table,我需要 collection,其中具有角色 owner
的项目将排在最后。这是数据库示例:
ID
Role
1
admin
2
user
3
user
4
owner
5
user
如何使用这些数据对 collection 进行排序,以获得最后一个具有角色 owner
的项目?我只能想到按字母顺序排序,保存到某个变量并从 collection 中删除具有所有者角色的记录,然后最后将其粘贴到 collection 中。但这对我来说似乎不必要地复杂,有没有更简单的方法?
我之所以需要这个是因为我需要删除所有选定的用户并确保 user/owner 是最后一个。
对于eloquent,您可以将sortBy()
方法与array_search()
一起使用:
$collection = Model::get();
$data = $collection->sortBy(function($item){
return array_search($item->role, ['admin', 'user', 'owner']);
});
您可以使用条件渲染。为此,您需要使用 DB::raw
示例:
Model::select('id', 'role')
->orderBy(DB::raw('role = "owner"'), 'ASC');
或使用shorthand:
Model::select('id', 'role')->orderByRaw("role = 'owner' ASC");
它将放在owners
最后。
在此处勾选 Fiddle:http://sqlfiddle.com/#!9/9d2b64/2
我有具有不同角色的数据库 table,我需要 collection,其中具有角色 owner
的项目将排在最后。这是数据库示例:
ID | Role |
---|---|
1 | admin |
2 | user |
3 | user |
4 | owner |
5 | user |
如何使用这些数据对 collection 进行排序,以获得最后一个具有角色 owner
的项目?我只能想到按字母顺序排序,保存到某个变量并从 collection 中删除具有所有者角色的记录,然后最后将其粘贴到 collection 中。但这对我来说似乎不必要地复杂,有没有更简单的方法?
我之所以需要这个是因为我需要删除所有选定的用户并确保 user/owner 是最后一个。
对于eloquent,您可以将sortBy()
方法与array_search()
一起使用:
$collection = Model::get();
$data = $collection->sortBy(function($item){
return array_search($item->role, ['admin', 'user', 'owner']);
});
您可以使用条件渲染。为此,您需要使用 DB::raw
示例:
Model::select('id', 'role')
->orderBy(DB::raw('role = "owner"'), 'ASC');
或使用shorthand:
Model::select('id', 'role')->orderByRaw("role = 'owner' ASC");
它将放在owners
最后。
在此处勾选 Fiddle:http://sqlfiddle.com/#!9/9d2b64/2