2016-12-20 4 views
2

Here's what I was doing before the error occurredIntegrität Einschränkungsverletzung: 1048 Spalte ‚user_id‘ kann nicht null Fehler sein tritt auf, wenn Rollen (Laravel 5.3) Zuordnung

Ich versuche, eine Rolle für einen Benutzer aus der Liste meiner users und roles Tabelle in einer neuen Tabelle zuweisen namens `role_users '.

Role.php Modell

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

User.php Modell

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

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

Ich halte den Fehler in dieser Zeile aus meinem AccountController.php bekommen

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

Ich habe Integrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into 'role_users' ('role_id', 'user_id') values (1,)). Die users table ist bereits aktualisiert und die user_id wurde bereits in der Datenbank gespeichert.

Kann mir jemand helfen? Ich muss einige wichtige Dinge übersehen haben.

+0

MY Schema Sinn Kribbeln . Sollte ein "Benutzer" nicht viele Rollen haben, statt zu gehören? – scottevans93

+0

Sie meinen hasMany stattdessen verwenden? Ja, ich habe das letzte Nacht benutzt. Aber ich bekomme einen 'Call to undefined Methode Illuminate \ Database \ Query \ Builder :: attach()' Fehler. Es sollte auf beiden Seiten eine "anyToMany" -Beziehung haben. – Eggnog654

+0

Es macht keinen Sinn. In Beziehungen gehören Modell A zu Modell B und Modell B zu vielen Modell A. Dass sie beide zu einander gehören, scheint gegen das Prinzip zu verstoßen. – scottevans93

Antwort

3

Das Problem hierbei ist, dass Sie nicht Rolle, um alle vorhandenen Benutzer anhängen kann, die Sie gerade laufen:

$roleuser = new User; 

Benutzerobjekt erstellen, das nicht in der Datenbank gespeichert wird.

Sie sollten lieber etwas tun:

$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*/ 

oder

$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*/ 

Sie sollten auch $roleuser Variable nicht hier verwenden, weil es offensichtlich $user

+0

Ich weiß das. Hehe. Aber ich habe letzte Nacht $ user als Variable benutzt, aber ich habe einen Fehler bekommen. Ich habe versucht, es zu ändern und das war, als es funktionierte.bis ich diesen Fehler habe. – Eggnog654

+0

Das hat funktioniert! Ich habe '$ user = User :: find ($ user_id);' verwendet, bevor ich die letzten zwei Zeilen ausgeführt habe, da ich bereits einen Benutzer in der Datenbank registriert habe. – Eggnog654

1

Sie können keine Beziehung zu einem nicht vorhandenen Benutzer hinzufügen. Versuchen Sie Benutzer erstellen zuerst:

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

Oder holen Benutzer von DB:

$roleuser = User:find(1); 
Verwandte Themen