https://laravel.com/docs/5.4/eloquent-mutators#attribute-casting例如
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 :(得分:3)
$casts
不适用于保存和更新方法。当您从模型中获取某些属性时会调用:__get()
,toArray()
或toJson()
。
对于MySQL:如果您尝试保存" 20",数据库可以根据列类型转换值:如果是整数 - 将保存20,如果布尔值 - 真
Bool,Boolean:这些类型是TINYINT(1)的同义词。值为零被视为false。非零值被认为是真实的。
答案 1 :(得分:2)
所有雄辩都是使用流畅的方法形成SQL查询。 $casts
属性仅在检索时有效。对于插入或更新,您应该检查数据库引擎及其如何转换它们。
如果你想使用雄辩强制使用Laravel施放。你可以添加mutators。
public function setSomebooleanAttribute($value)
{
$this->attributes['someboolean'] = boolval($value);
}