webentwicklung-frage-antwort-db.com.de

Laravel Standardwert für die Migration

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?

30
nrofis

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');

67
Khan Shahrukh

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.

1