移行におけるdefault
オプションの効果が何であるか理解できませんでした。
データベースの列がデフォルト値で定義されていることがわかりますが、モデルはそれを完全に無視しています。データベースのBook
テーブルを反映するbooks
モデルがあるとします。 booksテーブルを作成するための移行があります。
Schema::create('bools', 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();
データベースのprice
フィールドにが保存されます!
では、移行のdefault
オプションのポイントは何ですか?
ちなみに...モデルが移行内で(存在する場合)モデルと移行で手動で定義する代わりにフィールドのタイプと動作を確認するのは良くありませんでしたか?さらに、モデルのバリデーターを自動的に作成することもできます。移行構造を少し変更するだけで可能になったと思いますが、なぜそうではないのですか?
デフォルト値を一重引用符で囲むと、意図したとおりに機能します。移行の例:
$table->increments('id');
$table->string('name');
$table->string('url');
$table->string('country');
$table->tinyInteger('status')->default('1');
$table->timestamps();
EDIT:あなたの場合-> default( '100.0');
Default()を使用して、デフォルト値を簡単に設定できます。例を見る
$table->enum('is_approved', array('0','1'))->default('0');
ここでは列挙型を使用しましたが、デフォルト値は0です。