2017-05-31 139 views
0

https://laravel.com/docs/5.4/eloquent-mutators#attribute-casting例如laravel雄辯模式保存?

protected $casts = [ 'price' => 'integer', ];現在這將在檢索值時進行投射。保存時,我實際上不確定$book->price = "20"會做什麼,例如最有可能會節省20.

這是我的猜測,是不是?

什麼會$book->someboolean$casts =[ 'someboolean' -> 'boolean'];

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

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

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

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

會是什麼店?

+0

試一試。答案甚至可能因數據庫引擎而異。 – ceejayoz

+0

@ceejayoz這意味着雄辯留下我們獨自在那一個?因爲改變數據庫不應該改變代碼的運行方式。但正如你所說,似乎正是這樣做的。從根本上改變它。 – Toskan

+0

那麼,作爲一個例子,'$ book-> someboolean = null;'如果該字段不爲空,它將在Postgres中出錯,但它在MySQL中將正常工作(插入false)。主要是'$ casts'('json'強制轉換會影響它的保存方式,IIRC)在讀取時運行,而不是寫入。 – ceejayoz

回答

3

$casts對保存和更新方法不起作用。當你從模型獲得一些財產時,請致電:__get()toArray()toJson()

對於MySQL:如果試圖挽救「20」,數據庫可以根據列類型轉換值:如果是整數 - 20將被保存,如果布爾 - 真。

Bool,Boolean:這些類型是TINYINT(1)的同義詞。零值被認爲是錯誤的。非零值被認爲是真實的。

0

所有的雄辯都會形成使用流利方法的SQL查詢。 $casts屬性僅在檢索時有效。爲了插入或更新,您應該檢查數據庫引擎以及它如何轉換它們。

如果你想用Laravel強制轉換使用口才。你可以添加增變器。

public function setSomebooleanAttribute($value) 
{ 
    $this->attributes['someboolean'] = boolval($value); 
}