【问题标题】:Update a table with its relations in TypeOrm使用 TypeOrm 中的关系更新表
【发布时间】:2022-01-22 07:23:17
【问题描述】:

我们有:

Postgres 数据库

照片:

import {Entity, PrimaryGeneratedColumn, Column, ManyToOne} from "typeorm";
import {User} from "./User";

@Entity()
export class Photo {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    url: string;

    @ManyToOne(() => User, user => user.photos)
    user: User;

}

用户:

import {Entity, PrimaryGeneratedColumn, Column, OneToMany} from "typeorm";
import {Photo} from "./Photo";

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToMany(() => Photo, photo => photo.user)
    photos: Photo[];

}

表格:

+-------------+--------------+----------------------------+
|                         photo                           |
+-------------+--------------+----------------------------+
| id          | int(11)      | PRIMARY KEY AUTO_INCREMENT |
| url         | varchar(255) |                            |
| userId      | int(11)      | FOREIGN KEY                |
+-------------+--------------+----------------------------+

+-------------+--------------+----------------------------+
|                          user                           |
+-------------+--------------+----------------------------+
| id          | int(11)      | PRIMARY KEY AUTO_INCREMENT |
| name        | varchar(255) |                            |
+-------------+--------------+----------------------------+

所以一个用户可能有几张照片。

我想更新一位用户并更新他们的照片(这是一张不同的表格)。

以下是更新用户的方法:

await getRepository(User).update({ id }, userData);

问题是如何同时更新用户的照片?

请注意,当用户当前有 3 张照片时可能会出现问题,但例如您设置的是 2 张。所以你正在减少照片的数量。

【问题讨论】:

    标签: database postgresql typeorm


    【解决方案1】:

    也许你可以这样做

    例如

    import { getConnection } from "typeorm";
         
    
    const conn = getConnection();
        
    const id_user = id;
    
    const user = await conn.createQueryBuilder()
    .update("user")
    .set({
     id_photo:new_id_photo
    })
    .where("id_user= :id_user",{ id_user }).
    .returning("*")
    .execute();
    
    return user.raw;
    

    显然你必须改变一些值?。

    【讨论】:

    • 谢谢。但是 set 可以接受一个数组吗?一个用户可以拥有许多我可能想要更新的照片。
    • 如果我做对了,这个请求只会更新一张照片。它不会更新其他用户的数据,不是吗?
    • 是的,set可以接受一个数组,请给我你的userData
    • 很遗憾我没有真实的数据,这只是一个例子来理解当你有这样的表结构时如何与目标实体一起保存关系的概念。我实际上是从官方文档中获取这个例子的。但是他们没有说如何更新它,而他们说如何选择和添加新行。 typeorm.io/#/many-to-one-one-to-many-relations 假设 userData 是 { name: "Gena", photos: [{ url: "photoUrl1"}, { url: "photoUrl2"}] } 如果有帮助,我可以以某种方式更改数据结构。
    • 如果只有一张照片,您的示例就可以完美运行。 "set" 似乎不接受数组。
    猜你喜欢
    • 1970-01-01
    • 2021-02-20
    • 2021-06-02
    • 1970-01-01
    • 2021-07-16
    • 2021-12-20
    • 2021-07-06
    • 2021-01-04
    • 2021-04-04
    相关资源
    最近更新 更多