【问题标题】:No entity column was found using typeorm find使用 typeorm find 未找到实体列
【发布时间】:2020-10-02 16:40:28
【问题描述】:

我正在尝试使用其关系中的条件 find() 存储库。

(node:16719) UnhandledPromiseRejectionWarning: EntityColumnNotFound: No entity column "order.paid" was found.

关系如下:

订单.ts

@Entity('orders')
export class Order extends BaseModel {
  @PrimaryGeneratedColumn('uuid')
  @ApiProperty({ description: 'The Order ID' })
  id: string;

  // The Payment is finished or not
  @Column('boolean', { nullable: false, default: false })
  @ApiProperty({ description: 'Payment Confirmation for Database side' })
  paid: boolean;


  // The Items
  @OneToMany(type => Item, item => item.order, { nullable: false, eager: true, cascade: ['insert', 'update', 'remove'] })
  @ApiProperty({ description: 'The Order Items', isArray: true, type: Item })
  items: Item[];
}

Item.ts

export class Item extends BaseModel {
  @PrimaryGeneratedColumn('uuid')
  @ApiProperty({ description: 'The Item UUID' })
  id: string;

  @ManyToOne(type => Order, order => order.items, { nullable: false })
  @JoinColumn()
  order: Order;

  // The Shipping is finished or not
  @ApiProperty({ description: 'Shipped Indicator' })
  @Column('boolean', { nullable: false, default: false })
  shipped: boolean;
}

查找代码如下:

await this.payments.items.find({ where: { createdAt: Between(from, to), 'order.paid': true, shipped: true }, order: { createdAt: 'ASC' } });

我尝试了以下变体:

await this.payments.items.find({ where: { createdAt: Between(from, to), order:{ paid:true}, shipped: true }, order: { createdAt: 'ASC' } });
 const items = await this.payments.items.createQueryBuilder("item")
     .leftJoinAndSelect("order.paid","order")
     .where("order.paid = :paid AND item.shipped = :shipped", { paid:true , shipped: true})
     .getMany();

但它们都不起作用,

我了解将 Item 存储库更改为 Eager 评估可能会使其工作,但 typeorm 会禁用循环 Eager 声明。

【问题讨论】:

    标签: typescript typeorm


    【解决方案1】:

    这似乎在过去一个月内得到了修复(一些小问题仍在解决中):https://github.com/typeorm/typeorm/issues/2707

    这应该可以工作

    await this.payments.items.find({ where: { createdAt: Between(from, to), order:{ paid:true}, shipped: true }, order: { createdAt: 'ASC' } });
    

    外键似乎不起作用:https://github.com/typeorm/typeorm/issues/3288

    注意:如果 from/to 应该是日期而不是时间戳,您需要使用 date-fn 的 startOfDay(x) 和 endOfDay(x)

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 2023-03-19
      • 2020-12-09
      • 1970-01-01
      • 2019-04-03
      • 2021-02-22
      • 2022-01-06
      • 2021-10-11
      • 2019-02-08
      相关资源
      最近更新 更多