web-dev-qa-db-ja.com

TypeORMアップサート-存在しない場合は作成

TypeORMには、これを回避するためのいくつかの機能が含まれていますか?

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;
}

何かのようなもの :

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

TypeORMに接続してこれを行う a library が追加されました。

0
danielmhanover

ここでユーザーとしてエンティティに注意してください

@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

複数のレコードをアップサートする方法を探していて、PostgresとTypeORMを使用している人は、excludeキーワードを使用して、更新または挿入しようとしている行にアクセスできます。

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