Laravel 移行のデフォルト値 質問する

Laravel 移行のデフォルト値 質問する

default移行におけるオプションの効果を理解していませんでした。

データベースの列はデフォルト値で定義されていますが、モデルはそれを完全に無視していることがわかります。データベースのテーブルBookを反映するモデルがあるとしますbooks。books テーブルを作成するための移行があります。

Schema::create('books', function (Blueprint $table) {
    $table->increments('id');
          ->string('author');
          ->string('title');
          ->decimal('price', 4, 1)->default(100);
          ->timestamps();
});

Bookモデルの新しいインスタンスを作成すると、次のように表示されます。

$book = new Book();
var_dump($book->price); //Always 0...

デフォルト値は無視され、属性は正しく設定されません。これは新しいオブジェクトであり、DB からデフォルト値を取得するべきではないため、取得できます。しかし次のようにモデルを保存しようとすると:

$book = new Book();
$book->author = 'Test'
$book->title = 'Test'
$book->save();

それは保存されます0priceデータベースのフィールドに!

defaultでは、移行におけるオプションの目的は何でしょうか?

ところで... モデルと移行で手動で定義するのではなく、モデルが移行内 (存在する場合) でフィールド タイプと動作を確認できればもっと良いのではないでしょうか。さらに、モデルのバリデーターを自動的に作成することもできます。移行構造を少し変更するだけで可能だったと思うのですが、なぜそうしないのでしょうか。

ベストアンサー1

デフォルト値を一重引用符で囲むと、意図したとおりに動作します。移行の例:

$table->increments('id');
            $table->string('name');
            $table->string('url');
            $table->string('country');
            $table->tinyInteger('status')->default('1');
            $table->timestamps();

編集 :あなたの場合 ->default('100.0');

おすすめ記事