【问题标题】:How do i add data into a join table using TypeOrm?如何使用 TypeOrm 将数据添加到连接表中?
【发布时间】:2023-01-04 20:32:13
【问题描述】:

This is the Entity

我想通过 api 将数据插入到这个表中,它包含外键引用,如 student_id 和 roll_id。

我把student_id和roll_id注释掉了,避免出现多个key同名。

请帮帮我 :)

【问题讨论】:

  • 如果我答对了你的问题,你想输入引用其他表中 PK 的数据吗?
  • 是的!确切地说,我试过但失败了:(
  • 好的,如果您有任何数据,只需为数据指定 roll_id 和 student_id(如 student_id:1、roll_id:1),您在 db 中就可以正常工作,因为 db 本身会查看数据是否存在。
  • 这有点管用,但它会创建重复的 student_id 和 roll_id 列。
  • 好的,我注意到你的问题在哪里,你正在引用其他表中的其他列。尝试将其更改为您使用的表的 PK,它应该停止复制,因为 typeorm 会找出正在连接的内容。

标签: node.js typeorm


【解决方案1】:

我相信您只是在寻找如何插入?

async function saveStudentRollState(data: StudentRollState) {
  const repo = getRepository(StudentRollState);
  const savedRecord = await repo.save(data);
  return savedRecord;
}

【讨论】:

  • 嗨@danieldaugherty,我尝试过类似的解决方案,但由于它是 Join 表,因此该解决方案不起作用:(
【解决方案2】:

试试这个实体定义。

@Entity()
export class StudentRollState {
  ...
  @Column()
  student_id: number;
  
  @Column()
  roll_id: number;
  
  @ManyToOne(()=>Student, (student) => student.id)
  student: Student;
  
  @ManyToOne(()=>Roll, (roll) => roll.id)
  roll: Roll;
}

现在,如果您插入数据,您的复制应该会消失。

【讨论】:

  • 实际上这可行,但我无法使用 DTO 将数据插入到该表中,有没有办法实现这一点?
  • 你插入的时候有没有指定其他表的PK?我在我的许多应用程序中都使用了它并且它没有问题。
【解决方案3】:

试试这个 @ManyToMany() @JoinTable({ name: 'lead_division' })

const query = await createQueryBuilder('lead_divisions', 'ld').insert().values({ leadId: 1, divisionId: 1}).execute();

【讨论】:

    猜你喜欢
    • 2021-03-04
    • 1970-01-01
    • 2022-11-19
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多