TypeORM: Búsqueda relacional (NestJS incluido)
🤔 ¿Por qué?
Porque no quería realizar una búsqueda completa una vez que obtenía todos los registros. Ya que SQL está optimizado para las queries. Para este caso. Quería filtrar algunos registros basados en sus relaciones con otras tablas.
Voy a utilizar un caso simple para demostrarlo.
💡 Primero, necesitamos dos entidades TypeORM
Para el más sencillo de los casos, supongamos que tenemos dos clases. Una Pet
(Mascota) y un Owner
(Dueño). Una Mascota pertenece a sólo un Dueño. Pongamos las dos entidades / modelos en la misma carpeta.
Y
🔨 Creando el método para el controlador
Vamos a usar NestJS para este ejemplo. Un simple controlador NestJS se ve como el siguiente ejemplo.
Como puedes ver. La URL para la búsqueda será la siguiente /pets/search
🚛 Utilizando repositorios
Este es el método más compatible con Typescript. Prefiero este ya que tendré la ayuda de TS y la validación de tipos si actualizo cualquier campo en el futuro.
Lo que producirá la siguiente query
🚛 Usando Query Builder desde el repositorio
Éste método es el más cercano a SQL. Útil si estás más comodo con SQL.
La consulta SQL de la anterior función resultará como
⭐ El resultado final
Éste es el controlador final. Dentro del repositorio viene un archivo docker-compose.yml
para probarlo sin instalar Node en tu computadora. Además hay una ruta /fake
si quieres crear unos cuantos registros falsos de manera automatizada.
Recuerda, éste es SÓLO el controlador principal. Comprueba mi FULL demo en Github aquí