目标:编写一个select查询,该查询返回状态等于“佛罗里达”的所有行。
实体列:
@Column({ type: 'json'})
public address: Address;
样本列值:
{"city": "miami", "state": "florida"}
查询示例(无效):
getManager().getRepository(User)
.createQueryBuilder('user')
.select()
.where('user.address.state =:state', {state: "florida"})
typeorm当前是否支持此功能?如果是这样,我该如何修改where子句以返回正确的行?
答案 0 :(得分:4)
使其正常工作。
正确的语法:
.where(`user.address ::jsonb @> \'{"state":"${query.location}"}\'`)
答案 1 :(得分:2)
另一种可能的解决方案(原始SQL无法与此注入):
WHERE user.address ::jsonb @> $1
这样,TypeORM将产生一个以结尾的SQL查询
{ state: 'florida' }
,查询将被给出
export enum IngridientType {
BreadBottom = 'BreadBottom',
BreadTop = 'BreadTop',
Meat = 'Meat',
Cheese = 'Cheese',
Bacon = 'Bacon',
Salad = 'Salad',
Seeds1 = 'Seeds1',
Seeds2 = 'Seeds2',
}
export type IngredientsListType<R> = Record<IngridientType, R>
type IBurgerBuilderState<T> = { ingredients: Partial<IngredientsListType<T>> }
export class BurgerBuilder extends Component<{}, IBurgerBuilderState<number>> {
state = {
ingredients: {
[IngridientType.Bacon]: 2,
[IngridientType.Cheese]: 2,
},
}
}
作为查询参数,以替换查询中的正确值($ 1)。
来源:主要是原始问题+答案(谢谢!)+自己的测试+ https://www.postgresql.org/docs/9.4/functions-json.html
答案 2 :(得分:1)
return getRepository(User)
.createQueryBuilder()
.where('address @> :address', {
address: { state: "florida" },
})
.getMany();
答案 3 :(得分:-2)
这对我有用。我只是使用 TypeORM 之类的函数。
.find({
where: {
address: Like(`%${add what to search for here}%`),
},
});