Rohan Shukla
Rohan Shukla

Reputation: 89

Laravel, pivot table conflicts with many-to-many relationship

Hey guys so I'm using spatie binary uuid package and I had few doubts Things done so far: User.php Migration:

 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();
    });
 }

Role migration just have basic field called "name" with timestamps

Pivot table: 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');

    });
}

I know this is terribly wrong and I don't know what to do, I'm trying to save the Role model via this call

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

it doesn't work, where am I going wrong? I think it has something to do with role_user migration

User.php

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

Upvotes: 2

Views: 821

Answers (2)

atf.sgf
atf.sgf

Reputation: 494

you should edit your relation to this

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

if you say about your error we better can help you

Upvotes: 0

Hussein
Hussein

Reputation: 1153

try this, pivot migration:

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

roles relation:

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

please let me know if it didn't work

Upvotes: 1

Related Questions