QJoinQueryBuilder
@quik/database / QJoinQueryBuilder
Class: QJoinQueryBuilder<TModel, TResult>
Defined in: database/src/repository/QJoinQueryBuilder.ts:62
Fluent builder for queries that join across tables not necessarily declared as @Relations on the base model,
and that return a result shape other than the base model — any plain @Entity()-decorated class.
Unlike QQueryBuilder, this builder does not derive joins from relation metadata or force column
selection; it's a thin, typed wrapper around Knex's own join/where/select/groupBy/having, reusing
QWhereBuilder for conditions. Field names should be fully qualified as table.column when the query
spans more than one table; see Field for a typo-checked way to build those strings.
Obtain an instance via QRepository.joinQuery.
Example
class ProjectTeamMemberRepository extends QRepository<ProjectTeamMember> {
async findActiveMembership(projectId: number, userId: number, date: DateTime) {
return this.joinQuery(ActiveMembershipRow)
.join('ProjectTeam', 'ProjectTeam.id', 'ProjectTeamMember.projectTeamId')
.where(QWhereBuilder.New()
.Equal('ProjectTeam.projectId', projectId)
.And(
Conditions.Equal('ProjectTeamMember.userId', userId),
Conditions.LessThanOrEqual('ProjectTeamMember.startDate', date),
(group) => group.Or(
Conditions.IsNull('ProjectTeamMember.endDate'),
Conditions.GreaterThanOrEqual('ProjectTeamMember.endDate', date)
)
))
.select('ProjectTeamMember.*')
.first();
}
}
Extends
QObject
Type Parameters
TModel
TModel extends QModel
The base model the query starts from.
TResult
TResult extends QEntity
The @Entity()-decorated shape rows are mapped into.
Constructors
Constructor
new QJoinQueryBuilder<
TModel,TResult>(queryBuilder,entity,resultEntity):QJoinQueryBuilder<TModel,TResult>
Defined in: database/src/repository/QJoinQueryBuilder.ts:70
Creates a new join query builder.
Parameters
queryBuilder
QueryBuilder
Knex query builder already scoped to the base model's table.
entity
TModel
Base model instance, used to resolve unqualified field names in .where()/.having().
resultEntity
Constructor<TResult>
Constructor for the entity rows are mapped into.
Returns
QJoinQueryBuilder<TModel, TResult>
Overrides
QObject.constructor
Properties
_entity
protected_entity:TModel
Defined in: database/src/repository/QJoinQueryBuilder.ts:78
_queryBuilder
protected_queryBuilder:QueryBuilder
Defined in: database/src/repository/QJoinQueryBuilder.ts:77
_resultEntity
protected_resultEntity:Constructor<TResult>
Defined in: database/src/repository/QJoinQueryBuilder.ts:79
Accessors
logger
Get Signature
get
protectedlogger():IQLogger
Defined in: core/src/QObject.ts:15
The logger getter for the object.
Returns
IQLogger
Inherited from
QObject.logger
name
Get Signature
get name():
string
Defined in: core/src/QObject.ts:8
Returns
string
Inherited from
QObject.name
Methods
applyJoin()
protectedapplyJoin(kind,table,first,operatorOrSecond?,second?):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:91
Applies a join of the given kind, accepting either a (first, operator?, second) condition or a Knex join
callback for multi-condition ON clauses.
Parameters
kind
QJoinKind
Join type to apply.
table
string
Table to join.
first
string | JoinCallback
Left-hand column, or a join callback for a multi-condition ON clause.
operatorOrSecond?
string
Comparison operator, or the right-hand column when omitting the operator.
second?
string
Right-hand column of the join condition, when an operator is provided.
Returns
this
endSpan()
protectedendSpan(span):void
Defined in: core/src/QObject.ts:35
End a span returned by startSpan.
Parameters
span
TelemetrySpan
The span to end.
Returns
void
Inherited from
QObject.endSpan
first()
first():
Promise<TResult>
Defined in: database/src/repository/QJoinQueryBuilder.ts:270
Executes the query and returns the first matching row mapped to TResult, or undefined when no row matches.
Terminal method — consumes the underlying query builder.
Returns
Promise<TResult>
fullOuterJoin()
Call Signature
fullOuterJoin(
table,callback):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:174
Adds a full outer join.
Parameters
table
string
Table to join.
callback
JoinCallback
Join callback for a multi-condition ON clause.
Returns
this
Call Signature
fullOuterJoin(
table,first,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:175
Adds a full outer join.
Parameters
table
string
Table to join.
first
string
second
string
Returns
this
Call Signature
fullOuterJoin(
table,first,operator,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:176
Adds a full outer join.
Parameters
table
string
Table to join.
first
string
operator
string
second
string
Returns
this
get()
get():
Promise<TResult[]>
Defined in: database/src/repository/QJoinQueryBuilder.ts:282
Executes the query and returns all matching rows mapped to TResult.
Terminal method — consumes the underlying query builder.
Returns
Promise<TResult[]>
groupBy()
groupBy(...
columns):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:230
Adds a GROUP BY clause.
Parameters
columns
...string[]
Fully-qualified table.column columns to group by.
Returns
this
having()
having(
havingBuilder):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:199
Applies a QWhereBuilder's conditions as a HAVING clause, typically used after groupBy to
filter on aggregate results.
Parameters
havingBuilder
Conditions to apply; use fully-qualified table.column field names.
Returns
this
See
innerJoin()
Call Signature
innerJoin(
table,callback):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:135
Alias for join.
Parameters
table
string
callback
JoinCallback
Returns
this
Call Signature
innerJoin(
table,first,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:136
Alias for join.
Parameters
table
string
first
string
second
string
Returns
this
Call Signature
innerJoin(
table,first,operator,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:137
Alias for join.
Parameters
table
string
first
string
operator
string
second
string
Returns
this
join()
Call Signature
join(
table,callback):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:110
Adds an inner join.
Parameters
table
string
Table to join.
callback
JoinCallback
Join callback for a multi-condition ON clause.
Returns
this
Call Signature
join(
table,first,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:118
Adds an inner join.
Parameters
table
string
Table to join.
first
string
Left-hand column of the join condition.
second
string
Right-hand column of the join condition (implicit = operator).
Returns
this
Call Signature
join(
table,first,operator,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:127
Adds an inner join.
Parameters
table
string
Table to join.
first
string
Left-hand column of the join condition.
operator
string
Comparison operator.
second
string
Right-hand column of the join condition.
Returns
this
leftJoin()
Call Signature
leftJoin(
table,callback):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:148
Adds a left join.
Parameters
table
string
Table to join.
callback
JoinCallback
Join callback for a multi-condition ON clause.
Returns
this
Call Signature
leftJoin(
table,first,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:149
Adds a left join.
Parameters
table
string
Table to join.
first
string
second
string
Returns
this
Call Signature
leftJoin(
table,first,operator,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:150
Adds a left join.
Parameters
table
string
Table to join.
first
string
operator
string
second
string
Returns
this
limit()
limit(
count):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:251
Limits the number of returned rows.
Parameters
count
number
Maximum number of rows.
Returns
this
offset()
offset(
count):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:261
Skips a number of rows.
Parameters
count
number
Number of rows to skip.
Returns
this
orderBy()
orderBy(
column,direction?):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:241
Adds an ORDER BY clause.
Parameters
column
string
Fully-qualified table.column to sort by.
direction?
"asc" | "desc"
Sort direction. Defaults to asc.
Returns
this
recordSpanError()
protectedrecordSpanError(span,err):void
Defined in: core/src/QObject.ts:45
Record an exception on an active span.
Parameters
span
TelemetrySpan
The span to record the error on.
err
unknown
The error to record.
Returns
void
Inherited from
QObject.recordSpanError
rightJoin()
Call Signature
rightJoin(
table,callback):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:161
Adds a right join.
Parameters
table
string
Table to join.
callback
JoinCallback
Join callback for a multi-condition ON clause.
Returns
this
Call Signature
rightJoin(
table,first,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:162
Adds a right join.
Parameters
table
string
Table to join.
first
string
second
string
Returns
this
Call Signature
rightJoin(
table,first,operator,second):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:163
Adds a right join.
Parameters
table
string
Table to join.
first
string
operator
string
second
string
Returns
this
select()
select(...
columns):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:214
Selects columns. Accepts fully-qualified table.column/table.* strings, { field, as } pairs to alias a
plain column onto a specific result field (useful when the SQL column name doesn't already match the result
entity's field name), or a Knex.Raw expression for aggregates (e.g. this.knex.raw('COUNT(??) as ??', [...]).
{ field, as } quotes field as a single identifier — it is not safe for aggregate/function expressions
such as COUNT(x); use Knex.Raw for those instead.
Parameters
columns
...QJoinSelectOption[]
Columns to select.
Returns
this
setSpanAttribute()
protectedsetSpanAttribute(span,key,value):void
Defined in: core/src/QObject.ts:64
Set a single attribute on an active span.
Parameters
span
TelemetrySpan
The span to update.
key
string
Attribute key.
value
string | number | boolean
Attribute value.
Returns
void
Inherited from
QObject.setSpanAttribute
startSpan()
protectedstartSpan(spanName,options?):TelemetrySpan
Defined in: core/src/QObject.ts:26
Start a telemetry span for the given operation name. Returns undefined when no telemetry provider is active.
Parameters
spanName
string
Name of the span.
options?
TelemetrySpanOptions
Optional span attributes and kind.
Returns
TelemetrySpan
Inherited from
QObject.startSpan
where()
where(
whereBuilder):this
Defined in: database/src/repository/QJoinQueryBuilder.ts:187
Applies a QWhereBuilder's conditions to the query.
Parameters
whereBuilder
Conditions to apply; use fully-qualified table.column field names.
Returns
this