Laravel 5.4节省枢轴表

时间:2017-07-26 07:02:11

标签: laravel laravel-5.4

我目前正在尝试保存我的数据透视表,但此错误仍在继续。

SQLSTATE [42S22]:未找到列:1054未知列' role_role_id'在'字段列表' (SQL:插入role_userrole_role_iduser_id)值(1,1))

我不知道为什么role_role_id处于双重状态

这是我的模特

作用

public function users()
{
    return $this->belongsToMany(User::class);
}

用户

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

控制器

   $user = new User([
          'name'            => $request->get('username'),
          'email'           => $request->get('email'),
          'password'        => $request->get('password'),
          'role_id'         => $request->get('role_id'),         
        ]);

        $user->save();

        $role = Role::find(1);
        $role->users()->save($role);

移植

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



Schema::create('roles', function (Blueprint $table) {
            $table->increments('role_id');
            $table->string('role');
            //Required
            $table->string('created_by');
            $table->string('updated_by');
            $table->string('is_active');
            $table->timestamps();
        });

        Schema::create('role_user', function (Blueprint $table) {
            $table->integer('role_id');
            $table->integer('user_id');
            $table->primary(['role_id', 'user_id']);
        });

P.S。我只是遵循了雄辩的laravel文档 https://laravel.com/docs/5.4/eloquent-relationships#the-save-method

1 个答案:

答案 0 :(得分:1)

对于多对多,您应该使用attach()方法:

$user = User::create($request->all());
$user->roles()->attach(1);

另外,改变这个:

$table->increments('role_id');

为:

$table->increments('id');

并删除此行:

$table->primary(['role_id', 'user_id']);

然后重新创建表格。 primary不适用于数据透视表外键。