属性 [角色] 在此集合实例上不存在。在多对多关系中

Property [roles] does not exist on this collection instance. in a many-to-many relationship

您好,我正在学习多对多关系,我阅读了官方文档并使用了约定, 但我无法建立多对多的关系,我得到 属性 不存在的错误。

我该如何解决?

迁移

Schema::create('role_user', function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained()->onUpdate('cascade')->onDelete('cascade');
        $table->foreignId('role_id')->constrained()->onUpdate('cascade')->onDelete('cascade');
        $table->timestamps();
    });
}

用户

   Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

角色

 Schema::create('roles', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

型号:

用户

 public function roles(){
        return $this->belongsToMany(role::class, 'role_user', 'user_id', 'role_id');
    }

角色

public function users(){
        return $this->belongsToMany(User::class, 'role_user','role_id','user_id');
    }

查询:

$v = User::get();
 dd($v->roles);

$v = User::get(); returns 合集 users。如果您有一个用户,例如 User::find(1),您将有权访问该特定用户的角色。

另一种选择是

$users = User::with('roles')->get();

foreach ($users as $user) {
    $userRoles = $user->roles;
}