2017-05-31 138 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); 
}