首页 > 解决方案 > TypeORM 不是唯一的表/别名:'TABLE_NAME'

问题描述

我正在使用 NESTJS WITHMYSQL` 我正在尝试获取表的关系数据。我有两列与一个公共实体相关。当我尝试获取数据时,我得到了跟随错误。我无法理解如何解决这个问题。任何帮助都会得到帮助

{
  "exception": {
    "message": "ER_NONUNIQ_TABLE: Not unique table/alias: 'users'",
    "code": "ER_NONUNIQ_TABLE",
    "errno": 1066,
    "sqlMessage": "Not unique table/alias: 'users'",
    "sqlState": "42000",
    "index": 0,}
}

实体如下

@Entity('leave')
export class LeaveEntity {
  
  @PrimaryGeneratedColumn('increment')
  id: number;
  // relation between approver and user
  @ManyToOne(() => UserEntity, u => u.id, {
    eager: false,
    cascade: false,
    nullable: true
  })
  approvedBy: UserEntity[];

  // relation between leave and users
  @ManyToOne(() => UserEntity, user => user.id, {
    eager: false,
    cascade: false,
    nullable: false
  })
  user: UserEntity[];
}

获取数据的服务代码

const qb = getRepository(LeaveEntity)
      .createQueryBuilder("leave")
      .skip(size * (page - 1))
      .take(size)
      .orderBy('leave.created_at', orderBy)
      .leftJoinAndSelect("leave.approvedBy", "users")
      .leftJoinAndSelect("leave.user", "users")
      .select(['leave', 'users.email', 'users.id', 'users.firstName', 'users.lastName'])
const [items, total] = await qb.getManyAndCount();
return {items, total, page: +page, totalPages: Math.ceil(total/size)}

在此处输入图像描述

标签: mysqlnode.jsnestjsrelationshiptypeorm

解决方案


因为您将其命名为相同,所以请查看您的查询生成器:

      .leftJoinAndSelect("leave.approvedBy", "users")
      .leftJoinAndSelect("leave.user", "users")

所以最后你的查询会像这样结束:

SELECT * FROM leave LEFT JOIN users AS users LEFT JOIN users AS users ...

要解决这个问题,您必须将其命名为不同的,fe:

      .leftJoinAndSelect("leave.approvedBy", "apu") // as an approved users
      .leftJoinAndSelect("leave.user", "users")

然后apu.在查询的其余部分使用您的前缀


推荐阅读