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();
что он будет хранить?
$casts
не работает с методами сохранения и обновления. Это вызов, когда вы получаете свойство из модели: __get()
, toArray()
или же toJson()
,
Для MySQL: если вы попытаетесь сохранить «20», база данных может преобразовать значение в зависимости от типа столбца: если это целое число — 20 будет сохранено, если логическое — true.
Bool, Boolean: Эти типы являются синонимами для TINYINT (1). Нулевое значение считается ложным. Ненулевые значения считаются истинными.
Все красноречиво это формирует SQL-запрос, используя беглые методы. $casts
свойство работает только при получении. Для вставки или обновления вы должны проверить ядро базы данных и то, как оно их преобразует.
Если вы хотите форсировать касты с помощью Laravel, используйте eloquent. Вы можете добавить мутаторы.
public function setSomebooleanAttribute($value)
{
$this->attributes['someboolean'] = boolval($value);
}