Laravel,数据透视表与多对多关系发生冲突

时间:2018-09-02 05:48:02

标签: laravel laravel-5 eloquent uuid

大家好,我使用的是Spatie二进制uuid软件包,对此我几乎没有疑问 到目前为止完成的工作: User.php迁移:

 public function up()
  {
    Schema::create('users', function (Blueprint $table) {
        $table->uuid('uuid');
        $table->primary('uuid');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
 }

角色迁移只有带有时间戳的基本字段“ name”

数据透视表:role_user

public function up()
{
    Schema::create('role_user', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('role_id')->unsigned()->nullable()->index();
        $table->uuid('user_uuid');

    });
}

我知道这是完全错误的,我不知道该怎么办,我正在尝试通过此调用保存角色模型

$uuid = '478d7068-ae64-11e8-a665-2c600cf6267b';
$model = User::withUuid($uuid)->first();
$model->roles()->save(new Role(['name' => 'Admin']));

它不起作用,我在哪里出错?我认为这与role_user迁移有关

User.php

public function roles()
{
    return $this->belongsToMany(Role::class);
}

2 个答案:

答案 0 :(得分:1)

尝试一下,加快迁移速度:

public function up()
{
    Schema::create('role_user', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('role_id')->unsigned()->nullable()->index();
        $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
        $table->uuid('user_uuid');
       $table->foreign('user_uuid')->references('uuid')->on('users')->onDelete('cascade');
    });
}

角色关系:

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

请让我知道它是否无效

答案 1 :(得分:0)

您应该编辑与此关系

return $this->belongsToMany(Role::class,'role_user','user_uuid','role_id');

如果您提到自己的错误,我们会更好地为您提供帮助