You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用Laratrust包报错:Call to undefined method App\Models\User::attachRole()

解决Laravel使用Laratrust时Call to undefined method App\Models\User::attachRole()错误

你犯了一个典型的新手错误:把Laratrust提供的HasRolesAndPermissions trait加到了RegisterController里,而这个trait必须加到你的User模型中,只有这样User实例才会拥有attachRole这类角色操作方法。

具体修改步骤

  1. 修改User模型
    打开app/Models/User.php,引入并使用HasRolesAndPermissions trait:
<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Laratrust\Traits\HasRolesAndPermissions;

class User extends Authenticatable
{
    use HasRolesAndPermissions;

    // 模型原有代码...
}
  1. 清理RegisterController
    删掉控制器里无关的trait引用:
// 删掉这行引入
// use Laratrust\Traits\HasRolesAndPermissions;

class RegisterController extends Controller
{
    use RegistersUsers;
    // 删掉这行use语句
    // use HasRolesAndPermissions;

    // 控制器原有代码...
}
  1. 修正create方法逻辑
    确保方法返回用户实例,而不是attachRole的返回值(更符合Laravel默认逻辑):
protected function create(array $data)
{
    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
    
    $user->attachRole('admin');
    return $user;
}

内容的提问来源于stack exchange,提问作者meory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 23:30:29