Laravel migration default-Wert
Ich nicht verstehen, was ist die Wirkung der default
option in der Migration.
Kann ich sehen, dass die Spalte in der Datenbank definiert mit dem Standard-Wert, aber die Modelle sind ignorieren es völlig. Sagen, dass ich eine Book
Modell, reflektieren die books
Tabelle in der Datenbank. Ich habe die migration zum erstellen der Tabelle "books":
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 erstellen von Book
Modell sehe ich:
$book = new Book();
var_dump($book->price); //Always 0...
Den default-Wert wird ignoriert, und das Attribut nicht setzt richtig.
Ok, ich kann es bekommen, weil es ein neues Objekt und es sollte nicht die Standard-Werte aus der DB. Aber, wenn ich versucht zu retten, Modell:
$book = new Book();
$book->author = 'Test'
$book->title = 'Test'
$book->save();
Ist es spart 0 im Bereich price
in der Datenbank!
Also, was ist der Punkt, der default
option in der Migration?
Durch die Art und Weise...
War es nicht besser, wenn das Modell in der migration (wenn vorhanden) was sind die Bereiche, die Arten und das Verhalten, statt es zu definieren, die manuell in das Modell und die migration? Und außerdem, selbst zu schaffen, die eine Prüfung automatisch für das Modell. Ich denke, dass es möglich war, mit der kleinen änderung in der Struktur der migration, also warum ist es nicht so?
- In der Laravel Dokumentation dort heißt es "Vor dem ändern einer Spalte, müssen Sie die doctrine/dbal Abhängigkeit zu Ihrem Komponisten.json-Datei. Die Doctrine DBAL-Bibliothek wird verwendet, um zu bestimmen, den aktuellen Status der Spalte, und erstellen Sie die SQL-Abfragen benötigt werden, um die festgelegten Einstellungen auf die Spalte." Haben Sie diese Abhängigkeit?
- Ich bin kein ändern von Spalten, warum sollte ich das haben?
- Da
default($value)
ist ein modifier, der in Migrationen und dies ist Voraussetzung für die Modifikatoren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setzen der default-Wert in einfache Anführungszeichen und es funktioniert wie vorgesehen. Ein Beispiel der migration:
EDIT : in Ihrem Fall ->default('100.0');
php artisan migrate:refresh
es immer noch ignoriert der Standard-Wert$table->tinyInteger('status')->default('1');
es funktioniert. vielleicht ist es passiert weil dieForm::model
ich verwende für das speichern der Modelle. In dem Fall muss ich die Standardwerte definieren, die in das Modell manuell?php artisan make:migration add_action_to_task_table --table=tasks --default="someString"
ich möchte noch hinzufügen einer Zeichenfolge mithilfe der cli-Befehl. Irgendwelche Vorschläge hier? Ich kann nicht finden, die richtige Dokumentation, die auf dieser.Können Sie einfach den Standardwert mit der default-Option(). Siehe das Beispiel
Habe ich verwendet enum hier, und der Standardwert ist 0.