Mostrando entradas con la etiqueta modificador de estado. Mostrar todas las entradas
Mostrando entradas con la etiqueta modificador de estado. Mostrar todas las entradas

jueves, 31 de julio de 2025

Modificadores de estado de Factories de Laravel

¿Qué función cumple el siguiente código que aparece en UserFactory?:

/**

* Indicate that the model's email address should be unverified.

*/

public function unverified(): static

{

return $this->state(fn (array $attributes) => [

'email_verified_at' => null,

]);

}


Esta pregunta nos ayuda a entender cómo funcionan las fábricas de modelos en Laravel y la programación orientada a objetos en PHP.

La función unverified() en UserFactory sirve como un "estado" o "modificador" para crear usuarios de prueba. Su propósito es generar una instancia del modelo User que no ha verificado su correo electrónico.

Vamos a desglosar su función y lo que significa el código:


Explicación del Código

PHP
public function unverified(): static
{
    return $this->state(fn (array $attributes) => [
        'email_verified_at' => null,
    ]);
}
  • public function unverified(): static:

    • public function unverified(): Declara un método público llamado unverified. El nombre del método es descriptivo; nos dice que su propósito es crear un usuario sin verificar.

    • : static: Esta es una indicación del tipo de retorno de PHP 8.0+. Le dice a PHP que este método devolverá una instancia de la misma clase (UserFactory) en la que se está llamando. Esto es crucial para poder encadenar métodos. Por ejemplo, puedes escribir User::factory()->unverified()->create();.

  • return $this->state(...):

    • $this->state(): Este es un método nativo de las fábricas de modelos de Laravel. Su función es "modificar" el estado actual del modelo que se está creando. Recibe un callback (una función anónima) que se encarga de aplicar los cambios.

    • El return es lo que permite el encadenamiento de métodos, devolviendo la propia fábrica ($this) con el nuevo estado aplicado.

  • fn (array $attributes) => [...]:

    • fn (...): Esta es una sintaxis de "arrow function" de PHP 7.4+. Es una forma más concisa de escribir una función anónima.

    • array $attributes: Este parámetro representa los atributos del modelo que ya han sido generados por la fábrica. El callback puede usarlos para tomar decisiones o modificarlos. En este caso, no los utiliza directamente, pero son parte del prototipo de la función.

    • [ 'email_verified_at' => null, ]: Este es el corazón de la función. Es un array que define los cambios que se aplicarán a los atributos del modelo. Aquí se establece que la columna email_verified_at debe tener un valor de null.

En Resumen:

La función unverified() es un "atajo" de fábrica que te permite generar un usuario de prueba en un estado específico. En lugar de tener que sobrescribir manualmente el atributo email_verified_at cada vez que necesites un usuario sin verificar, simplemente llamas a este método.

Sin la función unverified():

PHP
User::factory()->create([
    'email_verified_at' => null,
]);

Con la función unverified():

PHP
User::factory()->unverified()->create();

Como puedes ver, el segundo enfoque es mucho más claro, conciso y fácil de leer, ya que el nombre del método documenta la intención del código. Este patrón se usa ampliamente en Laravel para definir diferentes estados de un modelo, como trashed(), pending(), active(), etc.