Saltar al contenido

TypeORM upsert – crear si no existe

Buscamos en diferentes espacios y así brindarte la respuesta para tu inquietud, si continúas con preguntas deja la duda y responderemos sin falta, porque estamos para servirte.

Solución:

Como señaló Tomer Amir, actualmente existe una solución parcial para verdadero disgusto y se abre una solicitud de función en el repositorio de TypeORM:

Solicitud de función upsert de TypeORM

Solución parcial:

await connection.createQueryBuilder()
        .insert()
        .into(Post)
        .values(post2)
        .onConflict(`("id") DO NOTHING`)
        .execute();

await connection.createQueryBuilder()
        .insert()
        .into(Post)
        .values(post2)
        .onConflict(`("id") DO UPDATE SET "title" = :title`)
        .setParameter("title", post2.title)
        .execute();

La respuesta anterior en realidad apunta a la forma de “actualización” de hacer lo que OP estaba pidiendo:

Ya hay un método para ello: Repository.save()de la cual la documentación dice:

Guarda todas las entidades dadas en la base de datos. Si las entidades no existen en la base de datos, se inserta; de lo contrario, se actualiza.

Pero si no especifica la identificación o el conjunto único de campos, el método de guardado no puede saber que se está refiriendo a un objeto de base de datos existente.

Entonces, alterar con typeORM es:

let contraption = await thingRepository.save(id: 1, name : "New Contraption Name !");

Para cualquiera que busque una forma de insertar múltiples registros y esté usando Postgres y TypeORM, puede acceder a la fila que está intentando actualizar/insertar a través de la palabra clave excluida.

const posts = [ id: 1, title: "First Post" ,  id: 2, title: "Second Post" ];

await connection.createQueryBuilder()
        .insert()
        .into(Post)
        .values(posts)
        .onConflict(`("id") DO UPDATE SET "title" = excluded."title"`)
        .execute();

Ahora hay una biblioteca que se conecta a TypeORM para ayudar a hacer esto.

Ten en cuenta difundir esta división si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *