TYPE或者如何在实体ID上应用where LIKE

问题描述 投票:0回答:2

我在我的应用程序上使用

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
字段上的查询。
并且还想使用运算符 LIKE 过滤我对
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。
或者我的查询写得不好。

谢谢

postgresql sql-like typeorm node.js-typeorm
2个回答
3
投票

我唯一能想到的就是在 where 选项中使用原始打字稿,所以像这样:

where: {
    transport: Like('%bike%'),
    beneficiary: Raw((alias) => `CAST(${alias} as varchar) ILike '%${3}%'`)
},

0
投票

示例:

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}%'`)
© www.soinside.com 2019 - 2024. All rights reserved.