A tu propio ritmo

Explora nuestra extensa colección de cursos diseñados para ayudarte a dominar varios temas y habilidades. Ya seas un principiante o un aprendiz avanzado, aquí hay algo para todos.

Bootcamp

Aprende en vivo

Únete a nosotros en nuestros talleres gratuitos, webinars y otros eventos para aprender más sobre nuestros programas y comenzar tu camino para convertirte en desarrollador.

Próximos eventos en vivo

Catálogo de contenidos

Para los geeks autodidactas, este es nuestro extenso catálogo de contenido con todos los materiales y tutoriales que hemos desarrollado hasta el día de hoy.

Tiene sentido comenzar a aprender leyendo y viendo videos sobre los fundamentos y cómo funcionan las cosas.

Buscar en lecciones


IngresarEmpezar
← Regresar a lecciones
Editar en Github

CRUD de datos en Express

  • createQueryBuilder - Crea un constructor de consultas utilizado para construir consultas SQL.
1const users = await repository 2 .createQueryBuilder("user") 3 .where("user.name = :name", { name: "John" }) 4 .getMany();
  • hasId - Comprueba si la propiedad de columna primaria de la entidad dada está definida.
1 if (repository.hasId(user)) { 2 // ... do something 3 }
  • getId - Obtiene los valores de las propiedades de la columna primaria de la entidad dada. Si la entidad tiene claves primarias compuestas, el valor devuelto será un objeto con los nombres y valores de las columnas primarias.
1const userId = repository.getId(user); // userId === 1
  • create - Crea una nueva instancia de User. Opcionalmente acepta un objeto literal con propiedades de usuario que serán escritas en el nuevo objeto de usuario creado.
1const user = repository.create(); // igual que const user = new User(); 2const user = repository.create({ 3 id: 1, 4 firstName: "Timber", 5 lastName: "Saw" 6}); // igual que const user = new User(); user.firstName = "Timber"; user.lastName = "Saw";
  • merge - Fusiona varias entidades en una sola.
1const user = new User(); 2repository.merge(user, { firstName: "Timber" }, { lastName: "Saw" }); // same as user.firstName = "Timber"; user.lastName = "Saw";
  • preload - Crea una nueva entidad a partir del objeto simple JavaScript dado. Si la entidad ya existe en la base de datos, entonces la carga (y todo lo relacionado con ella), sustituye todos los valores por los nuevos del objeto dado y devuelve la nueva entidad. La nueva entidad es en realidad una entidad cargada desde la base de datos con todas las propiedades reemplazadas desde el nuevo objeto.

Tenga en cuenta que el objeto tipo entidad dado debe tener un id de entidad / clave primaria por la que buscar la entidad. Devuelve undefined si no se encuentra la entidad con el id dado.

1const partialUser = { 2 id: 1, 3 firstName: "Rizzrak", 4 profile: { 5 id: 1 6 } 7}; 8const user = await repository.preload(partialUser); 9// user contendrá todos los datos que falten de partialUser con los valores de la propiedad partialUser: 10// { id: 1, firstName: "Rizzrak", lastName: "Saw", profile: { id: 1, ... } }
  • save - Guarda una entidad o matriz de entidades dada. Si la entidad ya existe en la base de datos, se actualiza. Si la entidad no existe en la base de datos, se inserta. Guarda todas las entidades dadas en una única transacción (en el caso de la entidad, el gestor no es transaccional). También admite la actualización parcial, ya que se omiten todas las propiedades no definidas. Devuelve la entidad o entidades guardadas.
1await repository.save(user); 2await repository.save([ 3 category1, 4 category2, 5 category3 6]);
  • remove - Elimina una entidad o matriz de entidades dada. Elimina todas las entidades dadas en una única transacción (en el caso de entidad, el gestor no es transaccional). Devuelve la entidad o entidades eliminadas.
1await repository.remove(user); 2await repository.remove([ 3 category1, 4 category2, 5 category3 6]);
  • insert - Inserta una nueva entidad, o arreglo de entidades.
1await repository.insert({ 2 firstName: "Timber", 3 lastName: "Timber" 4}); 5 6 7await manager.insert(User, [{ 8 firstName: "Foo", 9 lastName: "Bar" 10}, { 11 firstName: "Rizz", 12 lastName: "Rak" 13}]);
  • update - Actualiza parcialmente la entidad mediante una opción de actualización o un id de entidad dados.
1await repository.update({ firstName: "Timber" }, { firstName: "Rizzrak" }); 2// ejecuta UPDATE user SET firstName = "Rizzrak" WHERE firstName = "Timber" 3 4await repository.update(1, { firstName: "Rizzrak" }); 5// ejecuta UPDATE user SET firstName = "Rizzrak" WHERE id = 1
  • delete - Deletes entities by entity id, ids or given conditions:
1await repository.delete(1); 2await repository.delete([1, 2, 3]); 3await repository.delete({ firstName: "Timber" });
  • softDelete y restore - Borrado suave y restablecimiento de una fila por id
1const repository = connection.getRepository(Entity); 2// Eliminar una entidad 3await repository.softDelete(1); 4// Y puedes restaurarlo usando `restore`; 5await repository.restore(1);
  • softRemove y recover - Se trata de una alternativa a softDelete y restore.
1// Puedes borrarlos con softRemove 2const entities = await repository.find(); 3const entitiesAfterSoftRemove = await repository.softRemove(entities); 4 5// Y puedes recuperarlos usando recover; 6await repository.recover(entitiesAfterSoftRemove);
  • count - Cuenta las entidades que coinciden con las opciones dadas. Útil para la paginación.
1const count = await repository.count({ firstName: "Timber" });
  • increment - Incrementa alguna columna por el valor proporcionado de las entidades que coinciden con las opciones dadas.
1await manager.increment(User, { firstName: "Timber" }, "age", 3);
  • decrement - Disminuye alguna columna por el valor proporcionado que coincide con las opciones dadas.
1await manager.decrement(User, { firstName: "Timber" }, "age", 3);
  • find - Busca entidades que coincidan con las opciones dadas.
1const timbers = await repository.find({ firstName: "Timber" });
  • findAndCount - Busca las entidades que coinciden con las opciones de búsqueda dadas. También cuenta todas las entidades que coinciden con las condiciones dadas, pero ignora la configuración de paginación.(opciones skip y take).
1const [timbers, timbersCount] = await repository.findAndCount({ firstName: "Timber" });
  • findByIds - Busca múltiples entidades por id.
1const users = await repository.findByIds([1, 2, 3]);
  • findOne - Busca la primera entidad que coincida con algún id u opciones de búsqueda.
1const user = await repository.findOne(1); 2const timber = await repository.findOne({ firstName: "Timber" });
  • findOneOrFail - Busca la primera entidad que coincida con el mismo id u opciones de búsqueda. Rechaza la promesa devuelta si nada coincide.
1const user = await repository.findOneOrFail(1); 2const timber = await repository.findOneOrFail({ firstName: "Timber" });

Nota: Se recomienda encarecidamente asegurarse de que el valor de id o FindOptions no es null o undefined antes de llamar a findOne y findOneOrFail. Si se le pasa null o undefined, la consulta coincidirá con todas las entidades del repositorio y devolverá el primer registro.

  • query - Ejecuta una consulta SQL sin procesar.
1const rawData = await repository.query(`SELECT * FROM USERS`);
  • clear - Borra todos los datos de la tabla dada (los trunca/elimina).
1await repository.clear();

Additional Options

Opcional SaveOptions puede ser pasado como parámetro para save.

  • data - Datos adicionales a pasar con el método persist. Estos datos se pueden utilizar en los subscribers a continuación.
  • Listeners: boolean - Indica si los listeners y subscribers son llamados para esta operación. Por defecto están activados, puedes desactivarlos poniendo { listeners: false }` en las opciones de guardar/eliminar.
  • Transaction: boolean - Por defecto las transacciones están habilitadas y todas las consultas en la operación de persistencia se envuelven en la transacción. Puedes desactivar este comportamiento estableciendo { transaction: false }` en las opciones de persistencia.
  • chunk: number - Divide la ejecución de guardado en múltiples grupos de trozos. Por ejemplo, si quieres guardar 100.000 objetos pero tienes problemas para guardarlos, puedes dividirlos en 10 grupos de 10.000 objetos (estableciendo { chunk: 10000 }) y guardar cada grupo por separado. Esta opción es necesaria para realizar inserciones muy grandes cuando tienes problemas con la limitación del número de parámetros del controlador subyacente.
  • reload: boolean - Bandera para determinar si la entidad que está siendo persistida debe ser recargada durante la operación de persistencia. Sólo funcionará en bases de datos que no soporten la sentencia RETURNING / OUTPUT. Habilitado por defecto.

Ejemplo:

1// users contiene una matriz de entidades de usuario 2userRepository.save(users, {chunk: users.length / 1000});

Opcional RemoveOptions se puede pasar como parámetro para remove y delete.

  • data - Datos adicionales que se pasan con el método remove. Estos datos se pueden utilizar en los subscribers a continuación.
  • listener: boolean - Indica si los listeners y subscribers son llamados para esta operación. Por defecto están activados, puedes desactivarlos poniendo { listeners: false } en las opciones de guardar/eliminar.
  • transaction: boolean - Por defecto las transacciones están habilitadas y todas las consultas en la operación de persistencia se envuelven en la transacción. Puedes desactivar este comportamiento estableciendo { transaction: false } en las opciones de persistencia.
  • chunk: number - Divide la ejecución de guardado en múltiples grupos de trozos. Por ejemplo, si quieres guardar 100.000 objetos pero tienes problemas para guardarlos, puedes dividirlos en 10 grupos de 10.000 objetos, estableciendo { chunk: 10000 }, y guardar cada grupo por separado. Esta opción es necesaria para realizar inserciones muy grandes cuando tiene problemas con la limitación del número de parámetros del controlador subyacente.

Ejemplo:

1// users contiene una matriz de entidades de usuario 2userRepository.remove(users, {chunk: entities.length / 1000});