2017-05-31 7 views
0

https://laravel.com/docs/5.4/eloquent-mutators#attribute-castinglaravel eloquentのモデルは保存時にキャストされますか?

protected $casts = [ 'price' => 'integer', ];これは値を取得するときにキャストされます。保存するとき、実際には$book->price = "20"が何をするのかわかりません。おそらくそれは20を節約するでしょう。

これは私の推測です、そうですか?

何でしょう$book->someboolean

$book->someboolean = 'false'; $book->save();

$book->someboolean = '0'; $book->save();

$book->someboolean = 0; $book->save();

$book->someboolean = null; $book->save();

$casts =[ 'someboolean' -> 'boolean'];と何も保存しますか?

+0

試してみてください。答えは、データベースエンジンによって異なる場合もあります。 – ceejayoz

+0

@ceejayozそれは雄弁者が私たちをその一人で去ったことを意味しますか?データベースを変更しても、コードの実行方法は変わってはならないからです。しかし、あなたが言うように、それはまさにそれをするようです。基本的にそれを変更します。 – Toskan

+0

例として、 '$ book-> someboolean = null;'は、フィールドがヌル可能でない場合にPostgresでエラーになりますが、MySQLではうまく動作します(falseを挿入します)。 '$ casts'はほとんど(' json'のキャストはそれが保存される方法に影響を与え、IIRCの)関数は読み込みではなく書き込みに影響します。 – ceejayoz

答えて

3

$casts保存と更新の方法では機能しません。これは、モデルから__get()toArray()またはtoJson()のいくつかのプロパティを取得するときに呼び出されます。

MySQLの場合:「20」を保存しようとすると、データベースは列の種類に応じて値を変換できます。整数の場合、boolean-trueの場合は20が保存されます。

ブール、ブール:これらのタイプは、TINYINT(1)の同義語です。ゼロの値はfalseとみなされます。ゼロ以外の値は真とみなされます。

0

流暢な方法を使ってSQLクエリを構成します。 $castsプロパティは、取得時にのみ機能します。挿入または更新するには、データベースエンジンとそのキャスト方法を確認する必要があります。

Laravelでキャストを強制的に使用したい場合は、雄弁を使用します。ミューテータを追加することができます。

public function setSomebooleanAttribute($value) 
{ 
    $this->attributes['someboolean'] = boolval($value); 
} 
関連する問題