こんにちは私はそれらを持っているすべての結果を見つけようとしています。私はいくつかの方法を試しましたが、問題は何も機能しません。空の配列を返すだけです
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName = %:name%", {name: firstName })
.getMany();
そして、このようなもの
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName like %:name%", {name: firstName })
.getMany();
しかし、何も機能していません。これらはすべて、空の配列を返します。誰かが助けてくれてありがとう
正しい方法は次のとおりです。
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName like :name", {name: '%' + firstName + '%' })
.getMany();
TypeORMは、箱から出してLike
関数を提供します。例 ドキュメントから:
import {Like} from "typeorm";
const loadedPosts = await connection.getRepository(Post).find({
title: Like("%out #%")
});
あなたの場合:
var data = await getRepository(User).find({
name: Like(`%${firstName}%`)
});
リポジトリのニーズをサポートするために.findメソッドをすでに使用している場合は、QueryBuilderに切り替えたくない場合があります。
FindConditionsを使用してLIKEフィルターを実装する簡単な方法があります。
this.displayRepository.find({ where: "Display.name LIKE '%someString%'" });
または大文字と小文字を区別しない場合(postgresの場合):
this.displayRepository.find({ where: "Display.name ILIKE '%someString%'" });
これはインジェクション攻撃の影響を受けやすいので、動的な値を明示的に保護する必要があることに注意してください。
データベース関数を使用して連結することもできます。例えばpostgresでは:
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName like '%' || :name || '%'", {name: firstName })
.getMany();