Атрибут casts
Атрибут casts модели Eloquent определяет преобразование типов данных для атрибутов модели. При получении данных из базы они автоматически приводятся к указанному типу, а при сохранении - обратно к типу, понятному СУБД. Основные типы преобразований: 'integer', 'boolean', 'array', 'object', 'datetime' и другие.
Синтаксис
Определение атрибута casts в модели:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
protected $casts = [
'column_name' => 'type',
'is_active' => 'boolean',
'settings' => 'array',
];
}
?>
Пример
Давайте создадим модель 'Article' с полями 'views' (integer), 'is_published' (boolean) и 'options' (json) и настроим преобразование типов:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
protected $fillable = [
'title',
'views',
'is_published',
'options',
];
protected $casts = [
'views' => 'integer',
'is_published' => 'boolean',
'options' => 'array',
'created_at' => 'datetime',
];
}
?>
Пример
Теперь при получении данных из базы все преобразования выполнятся автоматически. Посмотрим, что произойдёт при извлечении статьи:
<?php
use AppModelsArticle;
use IlluminateSupportFacadesRoute;
Route::get('/article', function () {
$article = Article::find(1);
var_dump($article->views); // int
var_dump($article->is_published); // bool
var_dump($article->options); // array
var_dump($article->created_at); // DateTimeInterface
});
?>
Результат выполнения кода:
int(100)
bool(true)
array(2) { ["theme"]=> string(4) "dark" ["lang"]=> string(2) "ru" }
object(IlluminateSupportCarbon)#28 (1) { ["date"]=> string(26) "2024-01-15 10:30:00.000000" }
Пример
При сохранении данных модель автоматически приведёт значения обратно к типам, понятным базе данных:
<?php
use AppModelsArticle;
use IlluminateSupportFacadesRoute;
Route::post('/article', function () {
$article = new Article();
$article->title = 'New Article';
$article->views = '150'; // string to integer
$article->is_published = '1'; // string to boolean
$article->options = ['theme' => 'light', 'lang' => 'en']; // array to json
$article->save();
$res = $article->toArray();
echo json_encode($res);
});
?>
Результат выполнения кода:
{"id":2,"title":"New Article","views":150,"is_published":true,"options":{"theme":"light","lang":"en"},"created_at":"2024-01-15 10:35:00","updated_at":"2024-01-15 10:35:00"}
Смотрите также
-
атрибут
fillable,
который определяет поля, доступные для массового заполнения -
атрибут
hidden,
который скрывает поля при преобразовании модели в массив или JSON -
атрибут
appends,
который добавляет вычисляемые поля при преобразовании в массив -
атрибут
timestamps,
который управляет автоматическим заполнением полей created_at и updated_at