Introducción

1

¿Ya terminaste el Curso de NestJS: Programación Modular?

2

Platzi Store: presentación del proyecto e instalación

Database

3

Cómo instalar Docker para este proyecto

4

Configuración de PostgresSQL en Docker

5

Explorando postgres con interfaces gráficas y terminal

6

Integración de node-postgres con NestJS

7

Conexión como inyectable y ejecutando un SELECT

8

Usando variables de ambiente

TypeORM

9

¿Qué es un ORM? Instalando y configurando TypeORM Module

10

Creando tu primera entidad

11

TypeORM: active record vs. repositories

12

Crear, actualizar y eliminar

13

Cambiar a Mysql demo (opcional)

Migraciones

14

Sync Mode vs. Migraciones en TypeORM

15

Configurando migraciones y npm scripts

16

Corriendo migraciones

17

Modificando una entidad

Relaciones

18

Relaciones uno a uno

19

Resolviendo la relación uno a uno en el controlador

20

Relaciones uno a muchos

21

Resolviendo la relación uno a muchos en el controlador

22

Relaciones muchos a muchos

23

Resolviendo la relación muchos a muchos en el controlador

24

Manipulación de arreglos en relaciones muchos a muchos

25

Relaciones muchos a muchos personalizadas

26

Resolviendo la relación muchos a muchos personalizada en el controlador

Consultas

27

Paginación

28

Filtrando precios con operadores

29

Agregando indexadores

30

Modificando el naming

31

Serializar

Migración a NestJS 9 y TypeORM 0.3

32

Actualizando Dependencias para NestJS 9

33

Cambios en TypeORM 0.3

34

Migraciones en TypeORM 0.3

Próximos pasos

35

Cómo solucionar una referencia circular entre módulos

36

Continúa con el Curso de NestJS: Autenticación con Passport y JWT

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

15 Días
1 Hrs
53 Min
25 Seg

¿Qué es un ORM? Instalando y configurando TypeORM Module

9/36
Recursos

ORM (Object Relational Mapping) es una técnica de programación que nos ayuda a manipular y consultar la información almacenada dentro de una base de datos usando programación orientada a objetos. Un ORM se encarga de la conexión y también de manejar todo con base en modelos o entidades.

Una principal característica de un ORM es que hace más transparente las conexiones a PostgreSQL y MySQL, además nos protege de algunas vulnerabilidades de SQL y facilita algunas validaciones a la información.

Para qué sirve un ORM

Como esto es una abstracción, no vamos a tener que ejecutar código SQL directamente para hacer una búsqueda, una inserción o una actualización. La ORM va a dar métodos muy prácticos para utilizarlo dentro de nuestro código.

Un ORM nos ayuda en la extracción de código complejo SQL, sin embargo, nunca esta de mas que en verdad sepas cómo hacer tus propias consultas SQL en caso de que necesites una consulta muy potente o avanzada.

Instalando TypeORM

TypeORM está desarrollado con typescript, así que la integración con NestJS va a hacer buena.

Para hacer la integración, lo primero que debes hacer es instalar la dependencia

 npm install --save @nestjs/typeorm typeorm
// src/database/database.module.ts

import { TypeOrmModule } from '@nestjs/typeorm'; // 👈 import

@Global()
@Module({
  imports: [
    TypeOrmModule.forRootAsync({ // 👈 use TypeOrmModule
      inject: [config.KEY],
      useFactory: (configService: ConfigType<typeof config>) => {
        const { user, host, dbName, password, port } = configService.postgres;
        return {
          type: 'postgres',
          host,
          port,
          username: user,
          password,
          database: dbName,
        };
      },
    }),
  ],
  ...
  exports: ['API_KEY', 'PG', TypeOrmModule], // 👈 add in exports
})
export class DatabaseModule {}

Contribución creada con los aportes de: Jose Saúl Guerrero Serrano.

Aportes 16

Preguntas 11

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

  • Que hace? Capa extra que le ingresamos a nuestra app
  • Se encarga de la conexion y todo en base a modelos y entidades
  • En esas entidades definidos propiedades y metodos.
  • No vamos a realizar codigo sql para ejecutar las operaciones. Pero el ORM nos permite realizar operaciones y consultas complejas.
  • Tambien nos abstrae la conexion, asi que nos podemos conectar a diferentes motores.
  • Hay dos famosos ORM que se utilizan y son:
  • Sequelize
  • TypeORM

Alguien con una alma generosa, me pueda ayudar :’(

Para los que tengan problemas al instalar las dependencias en el minuto 3:43, me funcionó instalando las versiones que salen en el video:

npm i --save typeorm@0.2.31 @nestjs/typeorm@7.1.5

Pero al final no se uso esa conexión mediante TypeORM, porque los servicios inyectan es “PG” y como el profe no borró el provider (en database.module.ts tiene la conexión mediante pg y además la de TypeORM pero no cambio la inyección en los servicios) por eso no le salio ningún error y siguió funcionando porque sigue con “PG”

Qué bueno que añadieron la parte de la versión en concreto para las dependencias de esta clase.
Sin embargo, incluso así tuve errores, la solución es hacer:

npm i --save @nestjs/[email protected] [email protected] --legacy-peer-deps

Hola, como en este momento ya hay nuevas versiones de las dependencias, al intentar seguir la clase me salieron errores, por eso me tocó actualizar primero las dependencias antes de instalar typeorm, de la siguiente forma:

npm install -g npm-check-updates

Esto pone a todas las dependencias en su última versión, ahora hay que modificarlas en el package.json así:

ncu -u

Y finalmente las instalamos:

npm install

Ahora sí se puede instalar typeorm:

npm install --save @nestjs/typeorm typeorm

Al retornar el objeto de configuración (return {...}) de TypeOrmModule me daba el siguiente error

 Types of property 'type' are incompatible.
          Type '"postgres"' is not assignable to type '"aurora-data-api"'.

Lo solucioné con:

return Object.assign({ ... })

Al parecer para @nestjs/common ‘HttpModule’ y ‘HttpService’ ha quedado obsoleto… Se necesita instalar @nestjs/axios e importar estos dos paquetes desde @nestjs/axios…Por si alguien le pasa ese error
Fuente: https://github.com/nestjs/nest/issues/9385#issuecomment-1079452560

Si les tira el error “TypeError: (0 , rxjs_1.lastValueFrom) is not a function” deben actualizar la rxjs a una versión mayor a 7, lo hacen con el siguiente comando

npm i rxjs@^7

dejo el link donde encontré la solución

Hola a todos! 😄
Al principio a mí me costó bastante entender el concepto de lo que es un object-relational mapper (un ORM), así que aquí les dejo una definición que escribí después de tanto investigar y leer diferentes artículos.
.

Primero que todo, para entender este concepto hay que establecer una definición entre object-relational mapping y object-relational mapper, ya que son conceptos bien diferentes. object-relational mapping es una técnica de programación que nos ayuda a manipular y consultar la información almacenada dentro de una base de datos usando programación orientada a objetos, mientras que un object-relational mapper es una librería o módulo que utiliza la técnica anteriormente mencionada y encapsula el código necesario para manipular o consultar la base de datos, de forma que ya no tenemos que preocuparnos por escribir código SQL.

.
Espero que a alguien le sea de ayuda!

2024 \[SOLUCION] Error que aparece de `password authentication failed for user ` al momento de conectarse con TypeORM despues de usar el cliente PG, trata de conectarse y no usa el user predefinido en el config, es por una confusion de tipado y paso de datos entre el cliente de pg y TypeORM module: `new Client({...all, user})` vs `TypeOrmModule.forRootAsync({      ``inject``: [``config``.``KEY``],      useFactory: (        ``configService``: ConfigType<typeof ``config``>,      ): Promise<TypeOrmModuleOptions> | TypeOrmModuleOptions => {        const { ``username``, ``host``, ``dbname``, ``password``, ``port`` } =          ``configService``.``database``;        return {          ``type``: 'postgres',          ``host``,          ``username``,          ``database``: ``dbname``,          ``password``,          ``port``,          ``autoLoadEntities``: true,          ``synchronize``: false,        };      },    })` para evitarlo es bueno tipar el useFactory function con Promise\<TypeOrmModuleOptions> | TypeOrmModuleOptions Asi se evita el paso de dato incorrecto y se evita la confusion de pasar current user. Saludos

Se dice ESE CU ELE, no SICUAL.

Me parece excelente que hayan actualizado el curso, un 10 por Platzi

Usar = > npm i rxjs@^7 --save
Para este error [ExceptionHandler] rxjs_1.lastValueFrom is not a function +1ms TypeError: rxjs_1.lastValueFrom is not a function

ya no esta disponible typeOrm Module !

aca hay como hacerlo https://docs.nestjs.com/recipes/sql-sequelize

como indica en la docu, ahora todo esta en el paquete typeorm

npm install --save typeorm

y el nombre del paquete

import { createConnection } from 'typeorm';