Выборка с помощью Query Builder
Неофициальный Бета-перевод
Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →
Что такое QueryBuilder?
QueryBuilder — одна из самых мощных функций TypeORM,
позволяющая строить SQL-запросы с помощью элегантного и удобного синтаксиса,
выполнять их и получать автоматически преобразованные сущности.
Простой пример использования QueryBuilder:
const firstUser = await dataSource
.getRepository(User)
.createQueryBuilder("user")
.where("user.id = :id", { id: 1 })
.getOne()
Он создаёт следующий SQL-запрос:
SELECT
user.id as userId,
user.firstName as userFirstName,
user.lastName as userLastName
FROM users user
WHERE user.id = 1
и возвращает вам экземпляр User:
User {
id: 1,
firstName: "Timber",
lastName: "Saw"
}
Важное замечание при использовании QueryBuilder
При использовании QueryBuilder необходимо указывать уникальные параметры в выражениях WHERE. Такой подход не сработает:
const result = await dataSource
.getRepository(User)
.createQueryBuilder("user")
.leftJoinAndSelect("user.linkedSheep", "linkedSheep")
.leftJoinAndSelect("user.linkedCow", "linkedCow")
.where("user.linkedSheep = :id", { id: sheepId })
.andWhere("user.linkedCow = :id", { id: cowId })
... а такой сработает:
const result = await dataSource
.getRepository(User)
.createQueryBuilder("user")
.leftJoinAndSelect("user.linkedSheep", "linkedSheep")
.leftJoinAndSelect("user.linkedCow", "linkedCow")
.where("user.linkedSheep = :sheepId", { sheepId })
.andWhere("user.linkedCow = :cowId", { cowId })
Обратите внимание, что мы использовали уникальные имена :sheepId и :cowId вместо повторного использования :id для разных параметров.