我想从收藏夹中删除管理员用户。我知道它在表(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);

最佳答案

与其尝试从集合中删除一个项目,不建议首先不要选择它。

您可以这样向数据库查询添加约束:

$users = User::where('role', '!=', 'admin')->get();

(根据架构中角色的定义,可能会略有不同)。

如果您使用的是带有单独的roles表和user_role表的更复杂的架构,则可以这样查询:
$users = User::whereHas('roles', function($q){
    $q->where('role', '!=', 'admin');
})->get();

始终将管理员用户作为集合中的第一项是一个坏主意。如果以后您想拥有多个管理员用户或按注册日期对用户列表进行排序怎么办?如果您真的想从集合中删除admin,则Eloquent具有内置的过滤功能:
$usersWithoutAdmins = $users->filter(function($user)
{
    return !$user->hasRole('admin');
});

关于php - Laravel:如何通过ID从集合中删除项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28077817/

10-13 05:30