【问题标题】:TypeORM Not unique table/alias: 'TABLE_NAME'TypeORM 不是唯一的表/别名:'TABLE_NAME'
【发布时间】:2021-12-16 02:18:00
【问题描述】:

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

{
  "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)}

【问题讨论】:

    标签: mysql node.js nestjs relationship typeorm


    【解决方案1】:

    因为你的名字一样,看看你的查询生成器:

          .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. 前缀

    【讨论】:

    • 如果使用建议的解决方案。它不显示相关数据
    • 我不明白这张图片代表什么
    • 它应该添加approvedBy 键和它的相关数据。但我面临着奇怪的情况,只有任何一个关键在起作用。
    • Eeeee 你的实体声明有问题,比如,用户是一个 UserEntity[] 的数组,在输出中你有一个用户,一定要清理它,检查你的数据收集可能是什么失踪
    • 如果您遵循此前缀名称或您的前缀名称,也添加到 select 语句 select from apu.*
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多