2016-07-10 4 views
0

Meine Eloquenz enthält einen Standardwert für eine Spalte, und dieser Standardwert wird tatsächlich in der Datenbank festgelegt, wenn das Modell erstellt wird. Eloquent scheint diesen Wert jedoch nicht zu kennen und gibt null zurück.Laravel Eloquent Attribut nicht standardmäßig festgelegt

Die Migration:

public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('email')->unique(); 
     $table->string('password'); 
     $table->integer('role')->default(0); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 
} 

In der Datenbank ist der Wert für die Rolle in der Tat 0, aber wenn $user->getAttributes() die role Spalt Aufruf gar nicht existieren (wahrscheinlich, weil irgendwie der Wert festgelegt wird, auf null).

Was fehlt mir, damit das funktioniert? Wie kann ich einen Standardwert richtig einstellen, der tatsächlich verwendbar ist?

Antwort

0

Ich kann nur raten, aber ich denke, Sie haben auch erstellt Beziehung für Ihre User Modell, das ist, warum Sie Null bekommen. Sie sollten sich nicht denselben Namen für die Spalte und die Beziehung verwenden und wenn alle Felder in der Tat Fremdschlüssel zu anderen Tisch ist, sollten Sie sufix für Primärschlüssel für diese Tabelle hinzufügen, so zum Beispiel hier wäre, es zu benutzen empfohlen werden:

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

Wie Sie oben sehen, könnten hier einige zusätzliche Änderungen an diesem Spaltentyp vorgenommen werden.

+0

tatsächlich, ich habe keine Beziehungen nicht erstellt. Ich habe tatsächlich nichts nach meiner neuen Installation von Laravel als "Handwerker machen: Auth" getan und dieses Feld zur Migration hinzugefügt. – tam5

0

Wenn Sie den Standard Laravel Benutzermigration und Modell verwenden, fügen Sie die ‚Rolle‘ Spalte als Masse zuweisbare in Ihrem User-Modell

protected $fillable = ['name', 'email', 'password', 'role'];