node.js - Typeorm MySql zoeken op "kolom like %var%"
Hoe te zoeken in MySql met typeorm door gebruik te maken van "column like".
async findAll({
page,
count,
...where
}: CategorySelectFilter): Promise<Category[]> {
return this.categoryRepository.find({
where,
take: count,
skip: (page - 1) * count,
order: {
createdAt: 'DESC',
},
});
}
Wanneer "where" een naam bevat, moet het zoeken met "name like %var_name%" en niet alleen "name=var_name".
Ik heb iets nodig zoals de hook @BeforeLoad om de name-eigenschap in een entiteit te overschrijven.
Ik heb geprobeerd @Index({fullText: false}) op de naamkolom te gebruiken, maar het werkt niet.
Antwoord #1
Hier is mijn oplossing die ik altijd in mijn projecten gebruik.
Ik gebruik de voorwaardelijke spread-syntaxis (...) om de query dynamisch te 'bouwen'. Zie dit voor meer informatie.
async findAll({
page,
count,
whereConditions
}: CategorySelectFilter): Promise<Category[]> {
return this.categoryRepository.find({
...whereConditions,
take: count,
skip: (page - 1) * count,
order: {
createdAt: 'DESC',
},
where: {
...(whereConditions.name !== undefined && { name: ILike(`%${whereConditions.name}%`) }),
}
});
}
De where-voorwaarde name: "%VARIABLE%" wordt alleen toegevoegd als name aanwezig is in het whereConditions-object.
PS: Ik geef de voorkeur aan het gebruik van ILike: kan in plaats van Like worden gebruikt om de overeenkomst niet-hoofdlettergevoelig te maken volgens de actieve locale.
