QueryBuilder <Entity, RootAlias, Hint, Context, RawAliases, Fields>
Hierarchy
- QueryBuilder
Implements
Index
Properties
Accessors
Methods
- addSelect
- andHaving
- andOrderBy
- andWhere
- applyFilters
- as
- cache
- clone
- comment
- count
- delete
- distinct
- distinctOn
- execute
- from
- getCount
- getFormattedQuery
- getLoggerContext
- getNativeQuery
- getParams
- getQuery
- getResult
- getResultAndCount
- getResultList
- getSingleResult
- groupBy
- hasFlag
- having
- hintComment
- ignore
- indexHint
- innerJoin
- innerJoinAndSelect
- innerJoinLateral
- innerJoinLateralAndSelect
- insert
- join
- joinAndSelect
- leftJoin
- leftJoinAndSelect
- leftJoinLateral
- leftJoinLateralAndSelect
- limit
- merge
- offset
- onConflict
- orderBy
- orHaving
- orWhere
- returning
- select
- setFlag
- setFlushMode
- setLockMode
- setLoggerContext
- stream
- toQuery
- toRaw
- truncate
- unsetFlag
- update
- where
- withSchema
- withSubQuery
Properties
readonly__subquery
Accessors
alias
Returns string
helper
Returns QueryBuilderHelper
mainAlias
Returns Alias<Entity>
type
Returns QueryType
Methods
addSelect
Adds fields to an existing SELECT query.
Parameters
fields: F
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases | ExtractRawAliases<F extends readonly unknown[] ? F<F> : [F]>, Fields | ExtractRootFields<F extends readonly U[] ? U & string : F & string, RootAlias, Context>>
andHaving
Parameters
optionalcond: string | QBFilterQuery<Entity, RootAlias, Context, RawAliases>
optionalparams: any[]
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
andOrderBy
Adds additional ORDER BY clause without replacing existing order.
Parameters
orderBy: ContextOrderByMap<Entity, RootAlias, Context> | ContextOrderByMap<Entity, RootAlias, Context>[]
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
andWhere
Adds an AND WHERE clause to the query using an object condition.
Parameters
cond: QBFilterQuery<Entity, RootAlias, Context, RawAliases>
Returns this
applyFilters
Apply filters to the QB where condition.
Parameters
filterOptions: FilterOptions = {}
Returns Promise<void>
as
Returns native query builder instance with sub-query aliased with given alias.
Parameters
alias: string
Returns NativeQueryBuilder
cache
Parameters
config: number | boolean | [string, number] = true
Returns this
clone
Parameters
optionalreset: boolean | string[]
optionalpreserve: string[]
Returns QueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
comment
Prepend comment to the sql query using the syntax
/* ... *‍/. Some characters are forbidden such as/*, *‍/and?.Parameters
comment: undefined | string | string[]
Returns this
count
Creates a COUNT query to count matching rows.
Parameters
optionalfield: F | F[]
distinct: boolean = false
Returns CountQueryBuilder<Entity>
delete
Creates a DELETE query. Use
where()to specify which rows to delete.Parameters
optionalcond: QBFilterQuery<Entity, RootAlias, Context, RawAliases>
Returns DeleteQueryBuilder<Entity, RootAlias, Context>
distinct
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
distinctOn
postgres only
Parameters
fields: F
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
execute
Executes this QB and returns the raw results, mapped to the property names (unless disabled via last parameter). Use
methodto specify what kind of result you want to get (array/single/meta).Parameters
optionalmethod: get | all | run
optionaloptions: boolean | ExecuteOptions
Returns Promise<U>
from
Specifies FROM which entity's table select/update/delete will be executed, removing all previously set FROM-s. Allows setting a main string alias of the selection data.
Parameters
target: QueryBuilder<Entity, never, never, never, never, *>
optionalaliasName: string
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
getCount
Executes count query (without offset and limit), returning total count of results
Parameters
optionalfield: F | F[]
optionaldistinct: boolean
Returns Promise<number>
getFormattedQuery
Returns raw interpolated query string with all the parameters inlined.
Returns string
getLoggerContext
Gets logger context for this query builder.
Returns T
getNativeQuery
Parameters
processVirtualEntity: boolean = true
Returns NativeQueryBuilder
getParams
Returns the list of all parameters for this query.
Returns readonly unknown[]
getQuery
Returns the query with parameters as wildcards.
Returns string
getResult
Alias for
qb.getResultList()Returns Promise<Loaded<Entity, Hint, Fields>[]>
getResultAndCount
Executes the query, returning both array of results and total count query (without offset and limit).
Returns Promise<[Loaded<Entity, Hint, Fields>[], number]>
getResultList
Executes the query, returning array of results mapped to entity instances.
Parameters
optionallimit: number
Returns Promise<Loaded<Entity, Hint, Fields>[]>
getSingleResult
Executes the query, returning the first result or null
Returns Promise<null | Loaded<Entity, Hint, Fields>>
groupBy
Adds a GROUP BY clause to the query.
Parameters
fields: F
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
hasFlag
Parameters
flag: QueryFlag
Returns boolean
having
Adds a HAVING clause to the query, typically used with GROUP BY.
Parameters
cond: string | QBFilterQuery<Entity, RootAlias, Context, RawAliases> = {}
optionalparams: any[]
optionaloperator: $and | $or
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
hintComment
Add hints to the query using comment-like syntax
/*+ ... *‍/. MySQL and Oracle use this syntax for optimizer hints. Also various DB proxies and routers use this syntax to pass hints to alter their behavior. In other dialects the hints are ignored as simple comments.Parameters
comment: undefined | string | string[]
Returns this
ignore
Returns this
indexHint
Adds index hint to the FROM clause.
Parameters
sql: undefined | string
Returns this
innerJoin
Adds an INNER JOIN clause to the query for an entity relation.
Parameters
field: Field
alias: Alias
optionalcond: JoinCondition<ExpandProperty<GetType<Entity, Context, Field>[GetPropName<Field> & keyof GetType<Entity, Context, Field>]>, Alias>
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, Field, Alias, false>, RawAliases, *>
innerJoinAndSelect
Parameters
field: Field | [Field, RawQueryFragment<string> | QueryBuilder<any, never, never, never, never, *>]
alias: Alias
cond: JoinCondition<ExpandProperty<GetType<Entity, Context, Field>[GetPropName<Field> & keyof GetType<Entity, Context, Field>]>, Alias> = ...
optionalfields: JoinFields
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, ModifyHint<RootAlias, Context, Hint, Field, true> & {}, ModifyContext<Entity, Context, Field, Alias, true>, RawAliases, ModifyFields<Fields, RootAlias, Context, Field, Alias, JoinFields>>
innerJoinLateral
Parameters
field: RawQueryFragment<string> | QueryBuilder<any, never, never, never, never, *>
alias: Alias
cond: RawJoinCondition = {}
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, string, Alias, false>, RawAliases, *>
innerJoinLateralAndSelect
Parameters
field: [Field, RawQueryFragment<string> | QueryBuilder<any, never, never, never, never, *>]
alias: Alias
cond: JoinCondition<ExpandProperty<GetType<Entity, Context, Field>[GetPropName<Field> & keyof GetType<Entity, Context, Field>]>, Alias> = ...
optionalfields: JoinFields
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, ModifyHint<RootAlias, Context, Hint, Field, true> & {}, ModifyContext<Entity, Context, Field, Alias, true>, RawAliases, ModifyFields<Fields, RootAlias, Context, Field, Alias, JoinFields>>
insert
Creates an INSERT query with the given data.
Parameters
data: RequiredEntityData<Entity> | RequiredEntityData<Entity>[]
Returns InsertQueryBuilder<Entity, RootAlias, Context>
join
Adds a JOIN clause to the query for an entity relation.
Parameters
field: Field
alias: Alias
optionalcond: JoinCondition<ExpandProperty<GetType<Entity, Context, Field>[GetPropName<Field> & keyof GetType<Entity, Context, Field>]>, Alias>
optionaltype: JoinType
optionalpath: string
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, Field, Alias, false>, RawAliases, *>
joinAndSelect
Adds a JOIN clause and automatically selects the joined entity's fields. This is useful for eager loading related entities.
Parameters
field: Field | [Field, RawQueryFragment<string> | QueryBuilder<any, never, never, never, never, *>]
alias: Alias
cond: JoinCondition<ExpandProperty<GetType<Entity, Context, Field>[GetPropName<Field> & keyof GetType<Entity, Context, Field>]>, Alias> = ...
type: JoinType = JoinType.innerJoin
optionalpath: string
optionalfields: JoinFields
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, ModifyHint<RootAlias, Context, Hint, Field, true> & {}, ModifyContext<Entity, Context, Field, Alias, true>, RawAliases, ModifyFields<Fields, RootAlias, Context, Field, Alias, JoinFields>>
leftJoin
Adds a LEFT JOIN clause to the query for an entity relation.
Parameters
field: Field
alias: Alias
optionalcond: JoinCondition<ExpandProperty<GetType<Entity, Context, Field>[GetPropName<Field> & keyof GetType<Entity, Context, Field>]>, Alias>
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, Field, Alias, false>, RawAliases, *>
leftJoinAndSelect
Parameters
field: Field | [Field, RawQueryFragment<string> | QueryBuilder<any, never, never, never, never, *>]
alias: Alias
cond: JoinCondition<ExpandProperty<GetType<Entity, Context, Field>[GetPropName<Field> & keyof GetType<Entity, Context, Field>]>, Alias> = ...
optionalfields: JoinFields
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, ModifyHint<RootAlias, Context, Hint, Field, true> & {}, ModifyContext<Entity, Context, Field, Alias, true>, RawAliases, ModifyFields<Fields, RootAlias, Context, Field, Alias, JoinFields>>
leftJoinLateral
Parameters
field: RawQueryFragment<string> | QueryBuilder<any, never, never, never, never, *>
alias: Alias
cond: RawJoinCondition = {}
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, string, Alias, false>, RawAliases, *>
leftJoinLateralAndSelect
Parameters
field: [Field, RawQueryFragment<string> | QueryBuilder<any, never, never, never, never, *>]
alias: Alias
cond: JoinCondition<ExpandProperty<GetType<Entity, Context, Field>[GetPropName<Field> & keyof GetType<Entity, Context, Field>]>, Alias> = ...
optionalfields: JoinFields
optionalschema: string
Returns SelectQueryBuilder<Entity, RootAlias, ModifyHint<RootAlias, Context, Hint, Field, true> & {}, ModifyContext<Entity, Context, Field, Alias, true>, RawAliases, ModifyFields<Fields, RootAlias, Context, Field, Alias, JoinFields>>
limit
Sets a LIMIT clause to restrict the number of results.
Parameters
optionallimit: number
offset: number = 0
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
merge
Parameters
data: readonly NestedAutoPath<Entity, RootAlias, Context, P>[]
Returns this
offset
Sets an OFFSET clause to skip a number of results.
Parameters
optionaloffset: number
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
onConflict
Parameters
fields: RawQueryFragment<string> | F | F[] = ...
Returns InsertQueryBuilder<Entity, RootAlias, Context>
orderBy
Adds an ORDER BY clause to the query, replacing any existing order.
Parameters
orderBy: ContextOrderByMap<Entity, RootAlias, Context> | ContextOrderByMap<Entity, RootAlias, Context>[]
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
orHaving
Parameters
optionalcond: string | QBFilterQuery<Entity, RootAlias, Context, RawAliases>
optionalparams: any[]
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases, Fields>
orWhere
Adds an OR WHERE clause to the query using an object condition.
Parameters
cond: QBFilterQuery<Entity, RootAlias, Context, RawAliases>
Returns this
returning
Parameters
optionalfields: F | F[]
Returns this
select
Creates a SELECT query, specifying the fields to retrieve.
Parameters
fields: F
optionaldistinct: boolean
Returns SelectQueryBuilder<Entity, RootAlias, Hint, Context, RawAliases | ExtractRawAliases<F>, ExtractRootFields<F[number] & string, RootAlias, Context>>
setFlag
Parameters
flag: QueryFlag
Returns this
setFlushMode
Parameters
optionalflushMode: FlushMode
Returns this
setLockMode
Parameters
optionalmode: LockMode
optionaltables: string[]
Returns this
setLoggerContext
Sets logger context for this query builder.
Parameters
context: LoggingOptions & Dictionary
Returns void
stream
Executes the query and returns an async iterable (async generator) that yields results one by one. By default, the results are merged and mapped to entity instances, without adding them to the identity map. You can disable merging and mapping by passing the options
{ mergeResults: false, mapResults: false }. This is useful for processing large datasets without loading everything into memory at once.const qb = em.createQueryBuilder(Book, 'b');
qb.select('*').where({ title: '1984' }).leftJoinAndSelect('b.author', 'a');
for await (const book of qb.stream()) {
// book is an instance of Book entity
console.log(book.title, book.author.name);
}Parameters
optionaloptions: QBStreamOptions
Returns AsyncIterableIterator<Loaded<Entity, Hint, Fields>, any, any>
toQuery
Returns { params: readonly unknown[]; sql: string }
params: readonly unknown[]
sql: string
toRaw
Returns raw fragment representation of this QueryBuilder.
Returns RawQueryFragment<string>
truncate
Creates a TRUNCATE query to remove all rows from the table.
Returns TruncateQueryBuilder<Entity>
unsetFlag
Parameters
flag: QueryFlag
Returns this
update
Creates an UPDATE query with the given data. Use
where()to specify which rows to update.Parameters
data: EntityData<Entity>
Returns UpdateQueryBuilder<Entity, RootAlias, Context>
where
Adds a WHERE clause to the query using an object condition.
Supports filtering by:
- Direct entity properties:
{ name: 'John' } - Nested relations/embedded:
{ author: { name: 'John' } } - Aliased properties after joins:
{ 'a.name': 'John' }or{ 'b.title': 'test' } - Filter operators:
{ age: { $gte: 18 } } - Logical operators:
{ $or: [{ name: 'John' }, { name: 'Jane' }] }
Parameters
cond: QBFilterQuery<Entity, RootAlias, Context, RawAliases>
optionaloperator: $and | $or
Returns this
- Direct entity properties:
withSchema
Parameters
optionalschema: string
Returns this
withSubQuery
Parameters
subQuery: RawQueryFragment<string> | NativeQueryBuilder
alias: string
Returns this
SQL query builder with fluent interface.