首页 > 解决方案 > Laravel Spatie 调用未定义的方法 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()在这种情况下有散装的解决方案吗?

标签: laravellaravel-5laravel-permission

解决方案


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

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

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

正确的执行应该是这样的:

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

在不知道确切结果的情况下,您似乎想检索一组用户名,您想从中获取 User 模型。

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

$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();
}

推荐阅读