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" });
Il y a maintenant ne bibliothèque qui se connecte à TypeORM pour y parvenir.
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");
};
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();