web-dev-qa-db-fra.com

TypeORM upsert - créer s'il n'existe pas

TypeORM inclut-il des fonctionnalités pour éviter cela:

let contraption = await thingRepository.findOne({ name : "Contraption" });

if(!contraption) // Create if not exist
{
    let newThing = new Thing();
    newThing.name = "Contraption"
    await thingRepository.save(newThing);
    contraption = newThing;
}

Quelque chose comme :

let contraption = await thingRepository.upsert({ name : "Contraption" });
12
BeyondTheSea

Il y a maintenant ne bibliothèque qui se connecte à TypeORM pour y parvenir.

0
danielmhanover

Notez dans votre entité en tant qu'utilisateur ici

@OneToMany(type => Post, post => post.user, {
        cascade: true
    })
    posts: Post[];


export const saveAllPosts = async (req: Request, res: Response) => {
    const userRepository = getManager().getRepository(User);
    const postRepository = getManager().getRepository(Post);
    let i;
    let newUsers:any = [];
    let  newUser:any = {};
    let  newPost:any = {};
    for(i=1; i<=6; i ++) {
        newUser = await userRepository.findOne({ 
            where: { id: i} 
        });
        if(typeof newUser == "undefined") {
            newUser = new User();
            console.log("insert");
        } else  {
            console.log("update");
        }           
        newUser.name  = "naval pankaj test"+i;   

        newPost = await postRepository.findOne({ 
            where: { userId: i} 
        });
        if(typeof newPost == "undefined") {
            newPost = new Post();
            console.log("post insert");
        } else  {
            console.log("post update");
        }
        newPost.title = "naval pankaj add post title "+i;
        newUser.posts = [newPost];
        newUsers.Push(newUser);     
    }
    await userRepository.save(newUsers);  
    res.send("complete");
};
0
naval

Pour tous ceux qui recherchent un moyen d'insérer plusieurs enregistrements et utilisent Postgres et TypeORM, vous pouvez accéder à la ligne que vous essayez de mettre à jour/insérer via le mot clé exclu.

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();
0
Josh Gude