首页 > 解决方案 > 如何根据关系条件检索数据

问题描述

我有一个具有 OneToMany 关系的产品和图像实体,其中一个产品可以有许多图像。

但是可以删除图像。我没有从表中删除数据,而是禁用它添加一个名为“已删除”的布尔列。然后如果产品图片被删除,查询将返回没有图片的产品。

当产品有图像时,我进行了下一个可以正常工作的查询,但是如果图像已被删除,我不知道如何忽略该图像。

** 我的查询 **

const [ products, count ] = await this.productRepo
      .createQueryBuilder('product')
      .innerJoinAndSelect('product.images', 'image')
      .where([{ name: Like(`%${terms}%`) }, { description: Like(`%${terms}%`) }, { code: Like(terms) }])
      .orderBy('product.' + params.orderBy, params.orderMode)
      .offset(params.skip)
      .limit(params.take)
      .getManyAndCount()

    return { products, count }

** 图像实体 **

@Entity()
export class Image extends BaseEntity {
  @Column() 
  name: string
  
  @Column({ default: false })
  deleted: boolean
  
  @ManyToOne(() => Product, product => product.images) product: Product[];
}

** 产品实体 **

export class Product extends BaseEntity {
  @Column({ length: 20 })
  code: string

  @OneToMany(() => Image, image => image.product) images: Image[]
}

标签: mysqltypescripttypeorm

解决方案


我在 where 子句中没有看到对新删除列的任何引用。我希望像 { deleted: value } 这样的东西会出现在查询中。

.where([{ name: Like(`%${terms}%`) }, { description: Like(`%${terms}%`) }, { code: Like(terms) }])


推荐阅读