【发布时间】:2018-09-10 15:25:47
【问题描述】:
我正在使用 Sequelize 和 Posgresql。我也在使用sequelize-typescript。
我有一个类似 Compte 的模型:
export class Compte extends Model<Compte> {
@ForeignKey(() => CompteRevision)
@Column
derniereRevisionId: number;
@BelongsTo(() => CompteRevision, 'derniereRevisionId')
public derniereRevision: CompteRevision;
@Unique
@AllowNull(false)
@Column(DataType.STRING)
public email: string;
}
和 CompteRevision 类似:
export class CompteRevision extends Model<CompteRevision> {
@Column(DataType.BIGINT)
public compteId: number;
@Column(DataType.STRING)
public nom: string;
@Column(DataType.STRING)
public prenom: string;
}
我正在尝试发出搜索请求(基于字符串 searchText),以检索以下帐户:
- Compte.email 是 ILIKE : "%" + searchText + "%"
- 或
- Compte.derniereRevision.nom 是 ILIKE : "%" + searchText + "%"
- 或
- Compte.derniereRevision.prenom 是 ILIKE : "%" + searchText + "%"
在查看了许多关于 SO 的答案后,我尝试这样做:
public async search(searchText: string): Promise<Array<Compte>> {
return Compte.findAll({
where: {
email: { [Server.sequelize.Op.iLike]: "%" + searchText + "%" }
},
include: [{
model: CompteRevision, where: {
nom: { [Server.sequelize.Op.iLike]: "%" + searchText + "%" },
prenom: { [Server.sequelize.Op.iLike]: "%" + searchText + "%" }
}
}]
});
}
但我不确定 include 子句是否符合我的要求。实际上,这个方法总是返回一个空数组。有人知道如何通过检查嵌套实体(如 CompteRevision)的标准来执行此类查找请求。
【问题讨论】: