【问题标题】:Laravel Spatie Call to undefined method Illuminate\Database\Query\Builder::assignRole()Laravel Spatie 调用未定义的方法 Illuminate\Database\Query\Builder::assignRole()
【发布时间】:2020-09-09 03:05:40
【问题描述】:

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

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

在这种情况下批量assignRole() 的任何解决方案?

【问题讨论】:

  • 从数据库中获取用户 $updateUser = \App\User::whereIn('username', $get_username)->first();
  • 它只为一条记录分配角色。

标签: laravel laravel-5 laravel-permission


【解决方案1】:
$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();
}

【讨论】:

  • 它只为一条记录分配角色。此外,还有错误警告。基数违规 1242 子查询返回多于 1 行(SQL:select * from users where username = (select username from applicants where id in (148,149)))
  • 终于工作了,我换成User::whereIn。非常感谢
猜你喜欢
  • 2018-10-03
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 2014-04-25
  • 2017-02-20
  • 2017-10-04
  • 2018-05-17
相关资源
最近更新 更多