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

问题描述

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

我该如何解决

迁移

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_id','user_id');
    }

查询

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

解决方法

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

另一个选择是

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...