Consulta dentro de JSON en Eloquent
Seba Carrasco Poblete
Publicado hace 2 años
¿Sabías que puedes filtrar por las llaves JSON en Eloquent?
Imagínate que tienes una tabla con la columna "metadatos" en formato JSON, y quieres conocer todas las publicaciones que contenga la etiqueta "software"
1// database/migrations/2023_07_24_000000_create_publicaciones_table.php2$table->id();3$table->string('name');4// ...5$table->json('metadatos'); 6// ...
Para lograrlo, simplemente crea un where con el nombre de la columna, seguido de una flecha y el nombre de la búsqueda
1$etiqueta = 'software';2 3return Publicacion::where('metadatos->etiquetas', $etiqueta)->get();
Por supuesto, puedes crear uno o varios scopes para filtrar
1// app/Models/Publicacion.php2use Illuminate\Database\Eloquent\Builder;3 4public function scopeContieneEtiqueta(Builder $builder, string $etiqueta): void5{6 $builder->where('metadatos->etiquetas', $etiqueta);7}
Ahora puedes hacer algo así
1return Publicacion::contieneEtiqueta('software')->get();
Lo que devolverá lo siguiente
1[ 2 { 3 "id": 1, 4 "titulo": "Consulta dentro de JSON en Eloquent", 5 "metadatos": [ 6 "etiquetas": ['desarrollo', 'software'], 7 ], 8 }, 9 {10 "id": 4,11 "titulo": "Esta es otra publicación",12 "metadatos": [ 13 "etiquetas": ['privado', 'software'],14 ],15 }16]
Artículo creado por Seba Carrasco Poblete
Emprendedor. A los 14 años empecé a programar por hobby. Desde 2016 soy amigo de Laravel y su brillante comunidad (:
Me gustan los negocios, y desarrollar soluciones simples a problemas complejos de otros negocios. Soy fanático de las mejores prácticas