laravel eloquent模型在保存时投射?

时间:2017-05-31 19:44:52

标签: php laravel casting eloquent

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();

它会存储什么?

2 个答案:

答案 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);
}