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.
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 migrarPara ejecutar ejemplos en este artículo, necesita crear
nombre
ypublicado_a
columnas en elenviar
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 reemplazarNombre del Atributo
con un nombre de atributo real.los
setNameAttribute
Método se llama antes del valor de lanombre
El atributo se guarda en la base de datos. Para mantener las cosas simples, acabamos de utilizar elstrtolower
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 elucfirst
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 elEnviar
modelo. Debe establecer el valor de la columna de nombre en título de la entrada como hemos usado elstrtolower
función en elsetNameAttribute
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 unaCarbó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
yupdated_at
, con cada migración de la base de datos. Y convierte esos valores a unCarbó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 unCarbó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 elEnviar
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 elgetTimestamp
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!