Я использую 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.