首页 > 解决方案 > 如何使用 TypeORM 创建的外键在 Postgres 中创建 JOIN

问题描述

一些快速的上下文,我来自 MySQL,我创建了一个类似于 .NET 的 Dapper 包的自定义 ORM。很长一段时间以来,我一直在使用我的自定义 ORM 和 MySQL,但它没有记录在案,因此很难雇佣开发人员并期望他们高效。

我决定尝试迁移到 Postgres(这样我将来可以使用 Hasura),我现在正在使用 TypeORM。我使用 TypeORM 实体创建了表。现在,我无法使用在 MySQL 中运行良好的 JOIN 进行简单查询。

这是一个例子:

用户表

地址表

询问

SELECT
    user.id,
    user.first_name,
    user.last_name,
    address.address,
    address.city
FROM
    debtor
INNER JOIN address 
    ON user.id = address.userId;

错误

ERROR:  column address.userid does not exist
LINE 12:     ON user.id = address.userId;
                            ^
HINT:  Perhaps you meant to reference the column "address.userId".
SQL state: 42703
Character: 300

我尝试了一堆不同的 JOIN 类型,我尝试了别名,我尝试了替代格式。

笔记

这是 TypeORM 实体

// User.ts

...

  @OneToMany(() => Address, (address: Address) => address.user, {
    nullable: true,
    cascade: true,
    eager: true,
  })
  addresses: Address[];
// Address.ts

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

标签: typescriptpostgresqlormtypeorm

解决方案


推荐阅读