Ich habe nicht verstanden, wie sich die Option default
bei den Migrationen auswirkt.
Ich kann sehen, dass die Spalte in der Datenbank mit Standardwert definiert ist, aber die Modelle ignorieren es vollständig. Angenommen, ich habe ein Book
Modell, das die books
Tabelle in der Datenbank widerspiegelt. Ich habe eine Migration, um die Buchtabelle zu erstellen:
Schema::create('bools', function (Blueprint $table) {
$table->increments('id');
->string('author');
->string('title');
->decimal('price', 4, 1)->default(100);
->timestamps();
});
Wenn ich eine neue Instanz von Book
model erstelle, sehe ich:
$book = new Book();
var_dump($book->price); //Always 0...
Der Standardwert wird ignoriert und das Attribut ist nicht richtig eingestellt. Ok, ich kann es bekommen, weil es ein neues Objekt ist und es nicht die Standardwerte von der DB bekommen sollte. aber wenn ich versuche das Modell zu speichern wie:
$book = new Book();
$book->author = 'Test'
$book->title = 'Test'
$book->save();
Es wird im Feld price
in der Datenbank gespeichert!
Wozu dient die Option default
bei Migrationen?
Übrigens ... Es wäre nicht besser, wenn das Modell in der Migration sehen würde (falls vorhanden), welche Feldtypen und Verhaltensweisen es gibt, um sie manuell im Modell und in der Migration zu definieren. Darüber hinaus kann sogar automatisch ein Validator für das Modell erstellt werden. Ich denke, dass es mit einer kleinen Änderung der Migrationsstruktur möglich war, warum ist das nicht so?
Setzen Sie den Standardwert in einfache Anführungszeichen und es wird wie beabsichtigt funktionieren. Ein Beispiel für Migration:
$table->increments('id');
$table->string('name');
$table->string('url');
$table->string('country');
$table->tinyInteger('status')->default('1');
$table->timestamps();
EDIT: in deinem Fall -> default ('100.0');
Sie können den Standardwert einfach mit default () setzen. Siehe das Beispiel
$table->enum('is_approved', array('0','1'))->default('0');
Ich habe hier Enum verwendet und der Standardwert ist 0.