我在我的应用程序上使用
TypeORM
,并尝试对多个字段进行过滤查询。@Entity()
export default class Settings extends Base {
@IsString()
@IsDefined()
@MaxLength(256)
@MinLength(2)
@Column({ type: 'varchar', length: 256 })
public transport: string;
@Type(() => Beneficiary)
@OneToOne(() => Beneficiary, {
nullable: false,
eager: true,
})
@JoinColumn()
public beneficiary: Beneficiary
}
我想使用运算符 LIKE 过滤
transport
字段上的查询。beneficiary
的查询。这是我的询问:
const [settings, totalSettings] = await getRepository(Settings).findAndCount(
{
loadRelationIds: true,
where: {
transport: Like('%bike%'),
beneficiary: Like('35'),
},
},
)
我使用
loadRelationIds
映射beneficiary
后面的实体来直接获取id而不是完整的对象。beneficiary
:where: {
transport: Like('%bike%'),
beneficiary: '3',
},
但是如果我之前添加运算符
Like
,我会收到此错误:
QueryFailedError:运算符不存在:整数~~未知
有没有办法将运算符
LIKE
添加到该字段?看起来我无法在数字或实体数据上使用 Like。
或者我的查询写得不好。
谢谢
我唯一能想到的就是在 where 选项中使用原始打字稿,所以像这样:
where: {
transport: Like('%bike%'),
beneficiary: Raw((alias) => `CAST(${alias} as varchar) ILike '%${3}%'`)
},
示例:
member: { id: memberId },
type: Not(In([UserType.example, UserType.Admin])),
rec: {
status: isArchived
? In([recStatusType.CanceledMember])
: Not(In([recStatusType.CanceledMember])),
},
...(search ? {
[fieldName]:
Raw((alias) => `CAST(${alias} as varchar) ILike '%${search}%'`)