2016-12-20 3 views
2

Here's what I was doing before the error occurred整合性制約違反:1048列「user_idのは」nullにエラーすることはできませんロールを割り当てるときに発生する(Laravel 5.3)

私は、新しいテーブルの私のusersrolesテーブルからユーザーの役割を割り当てるためにしようとしています「role_users」と呼ばれます。

Role.phpモデル

class Role extends Model{ 
    public function users(){ 
    return $this->belongsToMany('App\User','role_users', 'role_id', 'user_id'); 
    } 
} 

User.phpモデル

class User extends Model implements Authenticatable 
{ 
    use \Illuminate\Auth\Authenticatable; 

    public function roles(){ 
    return $this->belongsToMany('App\Role', 'role_users', 'user_id', 'role_id'); 
    }  
} 

私は私のAccountController.php

$roleuser = new User; 
$user_superadmin = Role::where('role_desc', 'Superadmin')->first(); 
$roleuser->roles()->attach($user_superadmin); /*this line specifically*/ 
から、この行でエラーを取得しておきます

私はIntegrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into 'role_users' ('role_id', 'user_id') values (1,))を持っています。 users tableは既に更新されており、user_idは既にデータベースに保存されています。

誰かが私を助けることができますか?私はいくつかの重要なものを見逃しているに違いない。

+0

MYスキーマ感がヒリヒリされますので、

$roleuser = User::find(1); // find user with id 1 $user_superadmin = Role::where('role_desc', 'Superadmin')->first(); $roleuser->roles()->attach($user_superadmin); /*this line specifically*/ 

または

$roleuser = User::create(['name' => 'Sample user']); // create sample user $user_superadmin = Role::where('role_desc', 'Superadmin')->first(); $roleuser->roles()->attach($user_superadmin); /*this line specifically*/ 

あなたがここにも$roleuser変数を使用していないはずですが。 'User'は属しているのではなく、多くの役割を持つべきではありませんか? – scottevans93

+0

代わりにhasManyを使用することを意味しますか?はい、私は最後の1泊を使っていました。しかし、私は 'Call Undefined \ Illuminate \ Database \ Query \ Builder :: attach()'エラーを受け取っています。それは両側にbelongsToMany関係を持つ必要があります。 – Eggnog654

+0

意味がありません。関係では、モデルAはモデルBに属し、モデルBは多くのモデルAを有する。彼らを両方とも所属させることは、それぞれの原則に反しているようです。 – scottevans93

答えて

3

ここでの問題はあなたがちょうど実行し、既存のユーザーに役割を添付していないということです。

$roleuser = new User; 

データベースに保存されていないユーザーオブジェクトを作成します。

あなたは、むしろこのような何か行う必要があります。それは明らかに$user

+0

私はそれを知っています。 Hehe。しかし、私は昨夜$ userを変数として使用しましたが、エラーが発生しました。私はそれを変更しようとしたとき、それは働いた..このエラーが出るまで。 – Eggnog654

+0

これは機能しました! $ user = User :: find($ user_id); 'を使用しました。私は既にデータベースに登録されているユーザーを持っているので、最後の2行を実行します。 – Eggnog654

1

あなたは非既存のユーザーとの関係を添付することはできません。最初のユーザーを作成してみます

$roleuser = User::create(['name' => 'John']); // Instead of new User; 

またはDBからユーザーをフェッチ:

$roleuser = User:find(1); 
関連する問題