2016-06-29 8 views
1

Ich mache eine Migration und ich möchte, dass einige Felder nicht nullfähig sind. Um es einfacher zu machen, werde ich die Benutzer-Migration, die mit Laravel kommt, als Beispiel verwenden.Eloquent speichert keine Werte in Nicht-Null-Feldern

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

Keiner seiner Felder sind nullables, aber wenn ich machen:

$user = new User(); 
$user->save(); 
User::all(); 

Es gibt

Illuminate\Database\Eloquent\Collection {#639 
    all: [ 
     App\User {#640 
     id: "1", 
     name: "", 
     email: "", 
     created_at: "2016-06-29 15:51:01", 
     updated_at: "2016-06-29 15:51:01", 
     }, 
    ], 
    } 

Wo die Spitze des NULL-Werte zulässt() Modifikator, wenn ich Datensätze speichern kann, ohne Daten in Nicht-Null-Feldern?

Antwort

3

Nun, sie sind leer, aber sie sind nicht null - wie erwartet. Um zu vermeiden, leere Einträge müssen Sie Validierungsregeln verwenden, um das durchzusetzen:

In einem Controller:

public function store(Request $request) 
{ 
    $this->validate($request, [ 
     'name' => 'required|min:4', 
     'email' => 'required|email', 
     'password' => 'required|min:8', 
    ]); 

    $user = User::create($request->only('name', 'email', 'password')); 

    return redirect()->route('users.show', $user->id); 
} 
1

Ich denke, dass VARCHAR Feld Standardwert als „“ hat. string der Blueprint $table erzeugen varcharcolumn.

Wenn Sie festlegen möchten keine Nullable-Spalten verwenden ->nullable(false)

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