Mutadores y accesores elocuentes en Laravel

En este artículo, veremos los mutadores y los accesores del ORM Eloquent en el marco web de Laravel. Después de la introducción, veremos algunos ejemplos para comprender estos conceptos..

En Laravel, los mutadores y los elementos de acceso le permiten modificar los datos antes de guardarlos y recuperarlos de una base de datos. Para ser específico, el mutador le permite modificar los datos antes de que se guarden en una base de datos. Por otro lado, el descriptor de acceso le permite modificar los datos después de que se recuperan de una base de datos.

De hecho, el modelo Laravel es el lugar central donde puede crear métodos de acceso y mutación. Y, por supuesto, es bueno tener todas sus modificaciones en un solo lugar en lugar de dispersas en diferentes lugares.

Crear accesores y mutadores en una clase de modelo

Como ya está familiarizado con el concepto básico de mutadores y accesores, seguiremos adelante y desarrollaremos un ejemplo del mundo real para demostrarlo..

Supongo que usted es consciente del modelo Eloquent en Laravel, y usaremos el modelo Post como punto de partida de nuestro ejemplo. Si no has creado el Enviar modelo todavía, vamos a usar el artesano comando para crearlo.

php artesanal marca: modelo postmigración

Eso debería crear un archivo modelo en aplicación / Post.php Como se muestra abajo.

Vamos a reemplazar el contenido de ese archivo con el siguiente.

atributos ['nombre'] = strtolower ($ valor); 

Como hemos usado el --migración opción, también debe crear una migración de base de datos asociada. En caso de que no lo sepa, puede ejecutar el siguiente comando para que realmente cree una tabla en la base de datos.

php artesano migrar

Para ejecutar ejemplos en este artículo, necesita crear nombre y publicado_a columnas en el enviar mesa. De todos modos, no entraremos en los detalles del tema de la migración, ya que está fuera del alcance de este artículo. Así que volveremos a los métodos que nos interesan..

En primer lugar, vamos a pasar por el método mutador..

/ ** * Establecer el título de la publicación. * * @param string $ value * @return string * / public function setNameAttribute ($ value) $ this-> attributes ['name'] = strtolower ($ value); 

Como vimos anteriormente, los mutadores se utilizan para modificar los datos antes de que se guarden en una base de datos. Como puede ver, la sintaxis del método mutador es establecer el atributo nombre del atributo. Por supuesto, necesitas reemplazar Nombre del Atributo con un nombre de atributo real.

los setNameAttribute Método se llama antes del valor de la nombre El atributo se guarda en la base de datos. Para mantener las cosas simples, acabamos de utilizar el strtolower Función que convierte el título de la publicación en minúsculas antes de que se guarde en la base de datos..

De esta manera, podría crear métodos mutadores en todas las columnas de su tabla. A continuación, vamos a pasar por el método de acceso.

Si se usan mutadores para alterar los datos antes de que se guarden en una base de datos, el método de acceso se usa para alterar los datos después de que se recuperan de una base de datos. La sintaxis del método de acceso es la misma que la del mutador, excepto que comienza con la palabra clave get en lugar de la palabra clave set.

Vayamos a través del método de acceso. getNameAttribute.

/ ** * Obtener el título de la publicación. * * @param string $ value * @return string * / public function getNameAttribute ($ value) return ucfirst ($ value); 

los getNameAttribute El método se llamará después de que el valor del atributo de nombre se recupere de la base de datos. En nuestro caso, acabamos de utilizar el ucfirst Método para alterar el título del post..

Y esa es la forma en que se supone que debes usar los accesores en tus modelos. Hasta ahora, acabamos de crear métodos mutadores y de acceso, y los probaremos en la próxima sección.

Mutadores en Acción

Vamos a crear un controlador en app / Http / Controllers / MutatorController.php para que podamos probar el método mutador que creamos en la sección anterior.

setAttribute ('name', 'Post title'); $ post-> guardar (); 

Además, necesita crear una ruta asociada en el rutas / web.php archivo para acceder a él.

Route :: get ('mutator / index', 'MutatorController @ index');

En el índice Método, estamos creando una nueva publicación usando el Enviar modelo. Debe establecer el valor de la columna de nombre en título de la entrada como hemos usado el strtolower función en el setNameAttribute método mutador.

Fecha mutadores

Además del mutador del que hablamos anteriormente, el modelo Eloquent proporciona un par de mutadores especiales que le permiten modificar los datos. Por ejemplo, el modelo Eloquent en Laravel viene con un especial $ fechas propiedad que le permite convertir automáticamente las columnas deseadas a una Carbón fecha de la instancia.

Al comienzo de este artículo, creamos el Enviar modelo, y el siguiente código era parte de esa clase.

… / ** * Los atributos que deben ser mutados a las fechas. * * @var array * / protected $ dates = ['created_at', 'updated_at', 'publish_at'];… 

Como probablemente sepas, Laravel siempre crea dos campos relacionados con la fecha, Creado en y updated_at, con cada migración de la base de datos. Y convierte esos valores a un Carbón fecha de la instancia también.

Supongamos que tiene un par de campos en una tabla que le gustaría tratar como campos de fecha. En ese caso, solo necesita agregar nombres de columna en el $ fechas formación.

Como puede ver en el código anterior, hemos agregado el publicado_a columna en el $ fechas matriz, y se asegura de que el valor de esa columna se convertirá en un Carbón fecha de la instancia.

Accesores en Acción

Para ver los accesores en acción, avancemos y creamos un archivo controlador app / Http / Controllers / AccessorController.php con los siguientes contenidos.

nombre; // verifique la propiedad de la fecha echo $ post-> publish_at; // como hemos mutado la columna publish_at como fecha de carbono, podemos usar también echo $ post-> publish_at-> getTimestamp (); salida; 

Además, vamos a crear una ruta asociada en el rutas / web.php archivo para acceder a él.

Route :: get ('accessor / index', 'AccessorController @ index');

En el índice método, hemos utilizado el Enviar modelo para cargar un ejemplo de publicación en primer lugar.

A continuación, estamos inspeccionando el valor de la columna de nombre, y debería comenzar con una letra mayúscula, ya que hemos definido el método de acceso. getNameAttribute para esa columna.

Avanzando más, hemos inspeccionado el valor de la publicado_a columna, y que debe ser tratada como una fecha. Debido a eso, Laravel lo convierte en una instancia de Carbon para que pueda usar todos los métodos de utilidad proporcionados por esa biblioteca. En nuestro caso, hemos utilizado el getTimestamp Método para convertir la fecha en una marca de tiempo.

Y eso nos lleva al final de este artículo.!

Conclusión

Hoy, hemos explorado los conceptos de mutadores y accesores de la ORM Eloquent en Laravel. Proporciona una buena manera de alterar los datos antes de guardarlos y recuperarlos de una base de datos..

Para aquellos de ustedes que ya están comenzando con Laravel o que desean ampliar sus conocimientos, sitio o aplicación con extensiones, tenemos una variedad de cosas que puede estudiar en Envato Market..

No dudes en compartir tus pensamientos utilizando el siguiente feed!