Laravel Spatie 调用未定义的方法 Illuminate\Database\Query\Builder::assignRole()

Laravel Spatie Call to undefined method Illuminate\Database\Query\Builder::assignRole()

尝试对许多用户执行 assignRole(),但它显示调用未定义的方法 Illuminate\Database\Query\Builder::assignRole()。这是 spatie laravel 错误吗?

$get_username = \App\Applicant::select('username')->whereIn('id', $ids);
        $updateUser = \App\User::whereIn('username', $get_username);
        $updateUser->assignRole('Applicant');
        $updateUser->save();

在这种情况下,批量 assignRole() 有什么解决方案吗?

$get_username = \App\Applicant::select('username')->whereIn('id', $ids);

这是通过 QueryBuilder 进行的不完整查询。以及第二行。

使用 QueryBuilder 时,您需要使用 get() 方法完成查询以获取要迭代的集合。

正确的执行是这样的:

$get_username = \App\Applicant::select('username')->whereIn('id', $ids)->get();

在不知道具体结果的情况下,您似乎想要检索一组用户名,您希望从中获取用户模型。

您可以执行如下操作(未经测试)进行批量更新。:

$users = User::whereIn('username', function($query) use ($ids) {
    $query->select('username')
    ->from('applicants')->whereIn('id', $ids);
})->get();

foreach($users as $user) {
    $user->assignRole('Applicant');
    $user->save();
}