Blog SextaNet
[=]

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.php
2$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.php
2use Illuminate\Database\Eloquent\Builder;
3 
4public function scopeContieneEtiqueta(Builder $builder, string $etiqueta): void
5{
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

Comentarios

Aún no hay comentarios