Los Model Casts ahora son métodos a partir de Laravel 11
- Andrés Cruz
El casting o casteo de los modelos en Laravel es una herramienta poderosa para transformar valores de atributos en otros valores, por ejemplo, podemos convertir textos a fechas o a números si es el caso, y de esta forma aprovechar todas las funciones que provee el ecosistema de Laravel como Carbon en el caso de las fechas.
En Laravel, es posible csasteas a tipos primitivos como int, float, boolean, string, entre otros como fechas, la cual al ser de tipo Datetime automáticamente se puede convetir a Carbon, que es una librería empleada por Laravel para facilitar la manipulación de las fechas.
Las conversiones de modelos en Laravel 10 se definen mediante la propiedad de matriz $casts. Sin embargo, en Laravel 11, puedes definir un método casts(), que abre la posibilidad de usar métodos estáticos de maenra personalizada:
use App\Enums\UserOption;
use Illuminate\Database\Eloquent\Casts\AsEnumCollection;
// ...
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'options' => AsEnumCollection::of(UserOption::class),
];
}
En Laravel 10, la misma conversión se vería así, ya que no se pueden llamar métodos estáticos al definir una propiedad array:
protected $casts = [
'options' => AsEnumCollection::class.':'.UserOption::class,
];
Esta actualización es compatible con versiones anteriores de Laravel 10 y aún puede definir conversiones a través de la propiedad $casts combinada con el nuevo método casts(). La propiedad $casts y el método casts() se fusionan, y las claves del método tienen prioridad sobre la propiedad $casts. Aunque lo recomendado es emplear el casteo con la versión del método para aprovechar los métodos estáticos.
Artículo original:
https://laravel-news.com/model-casts
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter