我想从我的收藏中删除管理员用户.我知道它的主键(id)是1.但是当我使用forget(1)它时,从0开始删除集合中的数组元素.如何通过id从集合中删除项目?
// Grab all the users
$users = User::all(); //$this->user; use to return array not Laravel Object
if($users->find(1)->hasRole('admin'))
$users->forget(0);
Run Code Online (Sandbox Code Playgroud)
trm*_*m42 16
因此bencohenbaritone的答案是解决这个问题的更好方法,我必须补充说Laravel Eloquent Collection有方法except(),它可以通过主键而不是从集合中删除Eloquent对象forget().后者通过集合索引键(如array[i])删除,而不是通过主键删除.
所以你可以写一些类似的东西(抱歉这个坏的例子,我自己的用例太不同了,对其他人没用):
$admin_user_id = 20;
$users = User::all();
$users_without_admin = $users->except($admin_user_id);
Run Code Online (Sandbox Code Playgroud)
bth*_*hen 14
而不是尝试从集合中删除项目,最好永远不要选择它.
您可以像这样向数据库查询添加约束:
$users = User::where('role', '!=', 'admin')->get();
Run Code Online (Sandbox Code Playgroud)
(可能会略有不同,具体取决于在架构中如何定义角色).
如果您使用具有单独roles表和user_role表的更复杂模式,则可以像这样查询:
$users = User::whereHas('roles', function($q){
$q->where('role', '!=', 'admin');
})->get();
Run Code Online (Sandbox Code Playgroud)
依赖管理员用户始终是集合中的第一个项目是一个坏主意.如果以后您想拥有多个管理员用户,或者按注册日期对用户列表进行排序,该怎么办?如果你真的想从集合中删除admin,Eloquent有内置的过滤功能:
$usersWithoutAdmins = $users->filter(function($user)
{
return !$user->hasRole('admin');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19876 次 |
| 最近记录: |