我有两个实体:
@Entity()
export class Point {
@PrimaryGeneratedColumn('uuid')
id: string;
// some other stuff
}
@Entity()
export class Product {
@PrimaryGeneratedColumn('uuid')
id: string;
@IsOptional()
@ManyToMany(() => Point)
@JoinTable()
prohibitedToSaleOn: Point[];
}
我想得到乘积,其中prohibitedToSaleOn
(Point
数组)中的任何对象都满足条件
point.id {我想要什么}
所以,在最后我想得到所有的产品,而不是禁止销售在选定的点。我这样做:
return this.productRepository.createQueryBuilder('product')
.leftJoin('product.prohibitedToSaleOn', 'point')
.where('point.id != :id', {id})
.getMany();
但它不起作用(它根本不应该起作用)
我需要帮助正确的请求.谢谢=)
另外,我使用PostgreSQL
3条答案
按热度按时间z9zf31ra1#
我不确定你是否需要使用查询生成器。在这里你可以找到使用关系编写连接的替代方法的描述。
要通过id不等于您提供的id(
.where('point.id != :id', {id})
)来过滤它们,您可以编写类似find({where: {id: Not(id)}})
的代码,其中Not
是从TypeORM导入的。lh80um4z2#
尝试将
WHERE
条件移到join
级别该查询应该返回包含在
prohibitedToSaleOn
连接表中的除指定的点ID之外的所有产品。如果您需要在选择的点没有被禁止销售的产品和从未被禁止销售的产品,您需要这样的查询:
vuktfyat3#
我发现最简单的方法是使用
typeorm
的Not
运算符,如下所示:关于
Not
的文档:查找选项运算符。用于对表达式求反。示例:{ title:not(“hello”)}将返回title不等于“hello”的实体。
在此阅读更多信息