Como usar de forma correcta el campo JSON de MySQL

json-mysql

En mi sitio de trabajo tenían la necesidad de usar Google Maps para geo-referenciar sectores con latitudes y longitudes y otras características mas, pero como las respuestas son en formato JSON (ya que es un API), estuve investigando ya que había muchas columnas en la tabla y no quería hacer otra tabla solo para esos valores, vi que existía en MySQL y MariaDB un campo tipo json para guardar data en formato json y lo mas maravilloso es hacer consultas where para buscar data en especifico.

Laravel, como un frameworks tan potente y fácil de usar vi que lo emplea de forma fácil y sencilla, aquí en este corto tutorial le explicare como usar de forma correcta este maravilloso tipo de dato que trae MySQL.

Requisito

Debes tener instalado MySQL v5,7,8 o superior en su entorno de desarrollo, si está usando MariaDB, los campos JSON serán compatibles con MariaDB v10.2 en adelante.

Creando la migración de datos

En este ejemplo vamos a usar la migración que trae Laravel por defecto de create_users_table y agregamos una columna llamada “meta” que se va a encargar de guardar todos los metas en el campo tipo JSON:

Después ejecutamos el “php artisan migrate” para crear la tabla users.

Perfil de usuario con el campo meta

Este es un ejemplo de los metas que va a tener nuestro usuarios:

Puedes agregar la cantidad de data que desees en el campo meta, lo puedes ampliar si es necesario.

Model User

Ahora tenemos que convertir los datos de tipo JSON que están en la base de datos a array de esta forma:

Ahora agregamos el campo meta en el $fillable

Factory User

Antes que podamos seguir con la columna de tipo json vamos a crear un factory User para agregar algunos datos de prueba:

Seed User

creamos el seeder de esta manera:

Ahora agregamos el factory que creamos en el UserSeeder en el método run():

Luego en DatabaseSeeder llamamos el seeder UserSeeder en el método run():

Ahora tenemos algunos datos de ejemplo para poderlo usar ahora vamos hacer un crud.

Accesor para campos JSON

Supongamos que queremos acceder a todas la habilidades del usuario, definimos el acceso y agregamos estas habilidades a la matriz $appends del modelo, por lo que se agregara como una columna en las serializaciones JSON y de los arreglos:

Eso es todo, ahora puedes acceder a habilidades $user→skills como una propiedad en el modelo de usuarios.

Insertar datos

Gracias a Laravel, la creación de atributos, la serialización y la deserialización de columnas JSON son sencillas, hemos creado el campo meta como una matriz, ahora insertar datos en este campo JSON ya es simple.

Para este caso vamos a usar Tinker para insertar datos:

Aquí vemos que creamos de forma satisfactoria el usuario con la data meta

Seleccionar datos del campo JSON

Ahora veremos los distintos métodos para seleccionar datos de tipo JSON.

Intentemos seleccionar usuarios de un país y por genero

como puedes ver podemos acceder a los datos que esta en el JSON por medio de punteros “→” .

También puede usar el operador LIKE para realizar la búsqueda.

MySQL 5.7 proporciona algunas funciones que puede usar para realizar una búsqueda en documentos JSON.

La función JSON_CONTAINS () acepta el campo JSON que se busca y otro para comparar. Devuelve 1 cuando se encuentra una coincidencia:

Otra forma es la función JSON_SEARCH () que devuelve la coincidencia dada o NULL cuando no hay coincidencia. Se pasa el documento JSON que se busca, ‘uno’ para encontrar el primer partido o ‘todo’ para encontrar todas las coincidencias y una cadena de búsqueda.

También puede seleccionar una ruta JSON como alias de columnas como su forma de columnas normales.

Comparación y pedido de valores JSON

Los valores JSON se pueden comparar utilizando los operadores =, <, <=,>,> =, <>,! = Y <=>.

Actualizar datos de campos JSON

Ahora vamos hacer la actualización de nuestro campo tipo JSON

Cuando hacemos la consulta de la data que modificamos nos trae esto:

Tenga en cuenta que la asignación anterior reemplazará el contenido del campo meta, si desea actualizar solo una parte del documento JSON, debe hacerlo en su lugar.

Actualización de una parte del documento JSON

Si queremos actualizar un valor especifico en el campo meta tenemos que hacer lo siguiente:

También lo podemos hacer de esta forma:

También puede usar la forma clásica que está en la documentación de Laravel.
Además de estos, hay algunas funciones nativas proporcionadas por MySQL 5.7.8 para manipular el documento JSON. Aquí hay unos ejemplos:

Borrar ruta del documento JSON

Vamos a ver como hacemos para borrar datos en un campo JSON. Lo hacemos en esta forma:

Conclusion

Al usar JSON archivado en MySQL 5.7.8 podemos utilizar la flexibilidad de la base de datos no relacional dentro de MySQL, y Laravel, como siempre hace que sea muy fácil trabajar con campos JSON, es tentador para el nuevo comercio usar el campo JSON para todo, lo ideal es que siempre se use solo para almacenar datos como las preferencias del usuario, la configuración, las estadísticas de los usuarios o cualquier otro dato. Espero que le haya servido de ayuda!

 

Referencia
http://www.qcode.in/use-mysql-json-field-in-laravel/

Comparte este artículo

Entra en la discusión y deja tu comentario

Veces