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

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.