Skip to content

APIFrontend

QueryBuilder ​

The QueryBuilder class is a utility class that provides a fluent interface for building queries that can be used to filter, sort, paginate and append relations to the list of entities. It's based on the Laravel Eloquent query builder.

Not all Eloquent methods are supported. The supported methods are listed below.

General methods ​

getFilter ​

  • Type: () => Filter
  • Details Returns the current filter object.

Query building methods ​

The query builder provides a set of methods to build a query object that can be used to filter, sort, paginate and append relations to the list of entities.

We won't go over what each method does here, but you can find more information in the Laravel Eloquent documentation.

For reference, we'll add the method type signatures here.

The full QueryBuilder class can be found in ui/src/helpers/models/QueryBuilder.ts.

Utility types ​

typescript
export type ID = string | number

export type Closure = (query: QueryBuilder) => void

export type Operator =
	| '='
	| '<'
	| '>'
	| '<='
	| '>='
	| '<>'
	| '!='
	| 'like'
	| 'not like'
	| 'between'
	| 'ilike'
	| 'not ilike'

export type JoinType = 'inner' | 'left' | 'right' | 'cross'

export type Column = string

export type Relation = string

export type Table = string

whereKey ​

typescript
// Add a where clause on the primary key to the query.
whereKey(id: ID): QueryBuilder

whereKeyNot ​

typescript
// Add a where clause on the primary key to the query.
whereKeyNot(id: ID): QueryBuilder

where ​

typescript
// Add a basic where clause to the query.
where(column: Closure): QueryBuilder
where(
    column: Column | Column[],
    operator: Operator | null,
    value: string | number | boolean | null,
    boolean: 'and' | 'or',
): QueryBuilder

orWhere ​

typescript
// Add an "or where" clause to the query.
orWhere(
    column: Closure | Column | Column[],
    operator: Operator | null,
    value: string | number | null,
): QueryBuilder

whereNot ​

typescript
// Add a basic "where not" clause to the query.
whereNot(
    column: Closure | Column | Column[],
    operator: Operator | null,
    value: string | number | null,
    boolean: 'and' | 'or',
): QueryBuilder

orWhereNot ​

typescript
// Add an "or where not" clause to the query.
orWhereNot(
    column: Closure | Column | Column[],
    operator: Operator | null,
    value: string | number | null,
): QueryBuilder

latest ​

typescript
// Add an "order by" clause for a timestamp to the query.
latest(column: Column): QueryBuilder

oldest ​

typescript
// Add an "order by" clause for a timestamp to the query.
oldest(column: Column): QueryBuilder

distinct ​

typescript
// Force the query to only return distinct results.
distinct(): QueryBuilder

whereColumn ​

typescript
// Add a "where" clause comparing two columns to the query.
whereColumn(
    column: Column | Column[],
    operator: Operator | null,
    second: string | null,
    boolean: string | null,
): QueryBuilder

orWhereColumn ​

typescript
// Add an "or where" clause comparing two columns to the query.
orWhereColumn(
    column: Column | Column[],
    operator: Operator | null,
    second: string | null,
): QueryBuilder

whereIn ​

typescript
// Add a "where in" clause to the query.
whereIn(column: Column, values: string[] | number[], boolean: string, not: boolean): QueryBuilder

orWhereIn ​

typescript
// Add an "or where in" clause to the query.
orWhereIn(column: Column, values: string[] | number[]): QueryBuilder

whereNotIn ​

typescript
// Add a "where not in" clause to the query.
whereNotIn(column: Column, values: string[] | number[], boolean: string): QueryBuilder

orWhereNotIn ​

typescript
// Add an "or where not in" clause to the query.
orWhereNotIn(column: Column, values: string[] | number[]): QueryBuilder

whereNull ​

typescript
// Add a "where null" clause to the query.
whereNull(columns: Column | Column[], boolean: string, not: boolean): QueryBuilder

orWhereNull ​

typescript
// Add an "or where null" clause to the query.
orWhereNull(column: Column): QueryBuilder

whereNotNull ​

typescript
// Add a "where not null" clause to the query.
whereNotNull(columns: Column | Column[], boolean: string): QueryBuilder

whereBetween ​

typescript
// Add a where between statement to the query.
whereBetween(
    column: Column,
    iterable: [string | number, string | number],
    boolean: string,
    not: boolean,
): QueryBuilder

whereBetweenColumns ​

typescript
// Add a where between statement using columns to the query.
whereBetweenColumns(
    column: Column,
    values: [string, string],
    boolean: string,
    not: boolean,
): QueryBuilder

orWhereBetween ​

typescript
// Add an or where between statement to the query.
orWhereBetween(column: Column, iterable: [string | number, string | number]): QueryBuilder

orWhereBetweenColumns ​

typescript
// Add an or where between statement using columns to the query.
orWhereBetweenColumns(column: Column, values: [string, string]): QueryBuilder

whereNotBetween ​

typescript
// Add a where not between statement to the query.
whereNotBetween(
    column: Column,
    iterable: [string | number, string | number],
    boolean: string,
): QueryBuilder

whereNotBetweenColumns ​

typescript
// Add a where not between statement using columns to the query.
whereNotBetweenColumns(column: Column, values: [string, string], boolean: string): QueryBuilder

orWhereNotBetween ​

typescript
// Add an or where not between statement to the query.
orWhereNotBetween(column: Column, iterable: [string | number, string | number]): QueryBuilder

orWhereNotBetweenColumns ​

typescript
// Add an or where not between statement using columns to the query.
orWhereNotBetweenColumns(column: Column, values: [string, string]): QueryBuilder

orWhereNotNull ​

typescript
// Add an "or where not null" clause to the query.
orWhereNotNull(column: Column): QueryBuilder

whereDate ​

typescript
// Add a "where date" statement to the query.
whereDate(
    column: Column,
    operator: string | Operator,
    value: string | Operator | null,
    boolean: string,
): QueryBuilder

orWhereDate ​

typescript
// Add an "or where date" statement to the query.
orWhereDate(
    column: Column,
    operator: string | Operator,
    value: string | Operator | null,
): QueryBuilder

whereTime ​

typescript
// Add a "where time" statement to the query.
whereTime(
    column: Column,
    operator: string | Operator,
    value: string | Operator | null,
    boolean: string,
): QueryBuilder

orWhereTime ​

typescript
// Add an "or where time" statement to the query.
orWhereTime(
    column: Column,
    operator: string | Operator,
    value: string | Operator | null,
): QueryBuilder

whereDay ​

typescript
// Add a "where day" statement to the query.
whereDay(
    column: Column,
    operator: string | Operator | null,
    value: string | Operator | null,
    boolean: string,
): QueryBuilder

orWhereDay ​

typescript
// Add an "or where day" statement to the query.
orWhereDay(
    column: Column,
    operator: string | Operator | null,
    value: string | Operator | null,
): QueryBuilder

whereMonth ​

typescript
// Add a "where month" statement to the query.
whereMonth(
    column: Column,
    operator: string | Operator | null,
    value: string | Operator | null,
    boolean: string,
): QueryBuilder

orWhereMonth ​

typescript
// Add an "or where month" statement to the query.
orWhereMonth(
    column: Column,
    operator: string | Operator | null,
    value: string | Operator | null,
): QueryBuilder

whereYear ​

typescript
// Add a "where year" statement to the query.
whereYear(
    column: Column,
    operator: string | Operator | null,
    value: string | Operator | null,
    boolean: string,
): QueryBuilder

orWhereYear ​

typescript
// Add an "or where year" statement to the query.
orWhereYear(
    column: Column,
    operator: string | Operator | null,
    value: string | Operator | null,
): QueryBuilder

whereExists ​

typescript
// Add an exists clause to the query.
whereExists(callback: Closure, boolean: string, not: boolean): QueryBuilder

orWhereExists ​

typescript
// Add an or exists clause to the query.
orWhereExists(callback: Closure, not: boolean): QueryBuilder

whereNotExists ​

typescript
// Add a where not exists clause to the query.
whereNotExists(callback: Closure, boolean: string): QueryBuilder

orWhereNotExists ​

typescript
// Add a where not exists clause to the query.
orWhereNotExists(callback: Closure): QueryBuilder

whereJsonContains ​

typescript
// Add a "where JSON contains" clause to the query.
whereJsonContains(
    column: string,
    value: string | number,
    boolean: string,
    not: boolean,
): QueryBuilder

orWhereJsonContains ​

typescript
// Add an "or where JSON contains" clause to the query.
orWhereJsonContains(column: string, value: string | number): QueryBuilder

whereJsonDoesntContain ​

typescript
// Add a "where JSON not contains" clause to the query.
whereJsonDoesntContain(column: string, value: string | number, boolean: string): QueryBuilder

orWhereJsonDoesntContain ​

typescript
// Add an "or where JSON not contains" clause to the query.
orWhereJsonDoesntContain(column: string, value: string | number): QueryBuilder

whereJsonContainsKey ​

typescript
// Add a clause that determines if a JSON path exists to the query.
whereJsonContainsKey(column: string, boolean: string, not: boolean): QueryBuilder

orWhereJsonContainsKey ​

typescript
// Add an "or" clause that determines if a JSON path exists to the query.
orWhereJsonContainsKey(column: string): QueryBuilder

whereJsonDoesntContainKey ​

typescript
// Add a clause that determines if a JSON path does not exist to the query.
whereJsonDoesntContainKey(column: string, boolean: string): QueryBuilder

orWhereJsonDoesntContainKey ​

typescript
// Add an "or" clause that determines if a JSON path does not exist to the query.
orWhereJsonDoesntContainKey(column: string): QueryBuilder

whereJsonLength ​

typescript
// Add a "where JSON length" clause to the query.
whereJsonLength(
    column: string,
    operator: Operator,
    value: string | number | null,
    boolean: string,
): QueryBuilder

orWhereJsonLength ​

typescript
// Add an "or where JSON length" clause to the query.
orWhereJsonLength(column: string, operator: Operator, value: string | number | null): QueryBuilder

whereFullText ​

typescript
// Add a "where fulltext" clause to the query.
whereFullText(
    columns: Column | Column[],
    value: string,
    options: string[],
    boolean: string,
): QueryBuilder

orWhereFullText ​

typescript
// Add a "or where fulltext" clause to the query.
orWhereFullText(columns: Column | Column[], value: string, options: string[]): QueryBuilder

whereAll ​

typescript
// Add a "where" clause to the query for multiple columns with "and" conditions between them.
whereAll(
    columns: Column[],
    operator: Operator | null,
    value: string | number | null,
    boolean: string,
): QueryBuilder

orWhereAll ​

typescript
// Add an "or where" clause to the query for multiple columns with "and" conditions between them.
orWhereAll(columns: Column[], operator: Operator, value: string | number | null): QueryBuilder

whereAny ​

typescript
// Add an "where" clause to the query for multiple columns with "or" conditions between them.
whereAny(
    columns: Column[],
    operator: Operator,
    value: string | number | null,
    boolean: string,
): QueryBuilder

orWhereAny ​

typescript
// Add an "or where" clause to the query for multiple columns with "or" conditions between them.
orWhereAny(columns: Column[], operator: Operator, value: string | number | null): QueryBuilder

groupBy ​

typescript
// Add a "group by" clause to the query.
groupBy(...groups: Column[]): QueryBuilder

having ​

typescript
// Add a "having" clause to the query.
having(
    column: Column,
    operator: Operator | null,
    value: string | number,
    boolean: string,
): QueryBuilder

orHaving ​

typescript
// Add an "or having" clause to the query.
orHaving(column: Column, operator: Operator | null, value: string | number): QueryBuilder

havingNested ​

typescript
// Add a nested having statement to the query.
havingNested(callback: Closure, boolean: string): QueryBuilder

havingNull ​

typescript
// Add a "having null" clause to the query.
havingNull(columns: Column[], boolean: string, not: boolean): QueryBuilder

orHavingNull ​

typescript
// Add an "or having null" clause to the query.
orHavingNull(column: Column): QueryBuilder

havingNotNull ​

typescript
// Add a "having not null" clause to the query.
havingNotNull(columns: Column[], boolean: string): QueryBuilder

orHavingNotNull ​

typescript
// Add an "or having not null" clause to the query.
orHavingNotNull(column: Column): QueryBuilder

havingBetween ​

typescript
// Add a "having between " clause to the query.
havingBetween(
    column: Column,
    iterable: [string | number, string | number],
    boolean: string,
    not: boolean,
): QueryBuilder

orderBy ​

typescript
// Add an "order by" clause to the query.
orderBy(column: Column, direction: 'asc' | 'desc'): QueryBuilder

orderByDesc ​

typescript
// Add a descending "order by" clause to the query.
orderByDesc(column: Column): QueryBuilder

inRandomOrder ​

typescript
// Put the query's results in random order.
inRandomOrder(seed: string | number): QueryBuilder

skip ​

typescript
// Alias to set the "offset" value of the query.
skip(value: number): QueryBuilder

offset ​

typescript
// Set the "offset" value of the query.
offset(value: number): QueryBuilder

take ​

typescript
// Alias to set the "limit" value of the query.
take(value: number): QueryBuilder

limit ​

typescript
// Set the "limit" value of the query.
limit(value: number): QueryBuilder

forPage ​

typescript
// Set the limit and offset for a given page.
forPage(page: number, perPage: number): QueryBuilder

forPageBeforeId ​

typescript
// Constrain the query to the previous "page" of results before a given ID.
forPageBeforeId(perPage: number, lastId: ID | null, column: Column): QueryBuilder

forPageAfterId ​

typescript
// Constrain the query to the next "page" of results after a given ID.
forPageAfterId(perPage: number, lastId: ID | null, column: Column): QueryBuilder

reorder ​

typescript
// Remove all existing orders and optionally add a new order.
reorder(column: Column | null, direction: 'asc' | 'desc'): QueryBuilder

has ​

typescript
// Add a relationship count / exists condition to the query.
has(
    relation: Relation,
    operator: Operator,
    count: number,
    boolean: string,
    callback: Closure | null,
): QueryBuilder

hasNested ​

typescript
// Add nested relationship count / exists conditions to the query.
hasNested(
    relations: Relation,
    operator: Operator,
    count: number,
    boolean: string,
    callback: Closure | null,
): QueryBuilder

orHas ​

typescript
// Add a relationship count / exists condition to the query with an "or".
orHas(relation: Relation, operator: Operator, count: number): QueryBuilder

doesntHave ​

typescript
// Add a relationship count / exists condition to the query.
doesntHave(relation: Relation, boolean: string, callback: Closure | null): QueryBuilder

orDoesntHave ​

typescript
// Add a relationship count / exists condition to the query with an "or".
orDoesntHave(relation: Relation): QueryBuilder

whereHas ​

typescript
// Add a relationship count / exists condition to the query with where clauses.
whereHas(
    relation: Relation,
    callback: Closure | null,
    operator: Operator,
    count: number,
): QueryBuilder

withWhereHas ​

typescript
// Add a relationship count / exists condition to the query with where clauses.
withWhereHas(
    relation: Relation,
    callback: Closure | null,
    operator: Operator,
    count: number,
): QueryBuilder

orWhereHas ​

typescript
// Add a relationship count / exists condition to the query with where clauses and an "or".
orWhereHas(
    relation: Relation,
    callback: Closure | null,
    operator: Operator,
    count: number,
): QueryBuilder

whereDoesntHave ​

typescript
// Add a relationship count / exists condition to the query with where clauses.
whereDoesntHave(relation: Relation, callback: Closure | null): QueryBuilder

orWhereDoesntHave ​

typescript
// Add a relationship count / exists condition to the query with where clauses and an "or".
orWhereDoesntHave(relation: Relation, callback: Closure | null): QueryBuilder

hasMorph ​

typescript
// Add a polymorphic relationship count / exists condition to the query.
hasMorph(
    relation: Relation,
    types: string | string[],
    operator: Operator,
    count: number,
    boolean: string,
    callback: Closure | null,
): QueryBuilder

orHasMorph ​

typescript
// Add a polymorphic relationship count / exists condition to the query with an "or".
orHasMorph(
    relation: Relation,
    types: string | string[],
    operator: Operator,
    count: number,
): QueryBuilder

doesntHaveMorph ​

typescript
// Add a polymorphic relationship count / exists condition to the query.
doesntHaveMorph(
    relation: Relation,
    types: string | string[],
    boolean: string,
    callback: Closure | null,
): QueryBuilder

orDoesntHaveMorph ​

typescript
// Add a polymorphic relationship count / exists condition to the query with an "or".
orDoesntHaveMorph(relation: Relation, types: string | string[]): QueryBuilder

whereHasMorph ​

typescript
// Add a polymorphic relationship count / exists condition to the query with where clauses.
whereHasMorph(
    relation: Relation,
    types: string | string[],
    callback: Closure | null,
    operator: Operator,
    count: number,
): QueryBuilder

orWhereHasMorph ​

typescript
// Add a polymorphic relationship count / exists condition to the query with where clauses and an "or".
orWhereHasMorph(
    relation: Relation,
    types: string | string[],
    callback: Closure | null,
    operator: Operator,
    count: number,
): QueryBuilder

whereDoesntHaveMorph ​

typescript
// Add a polymorphic relationship count / exists condition to the query with where clauses.
whereDoesntHaveMorph(
    relation: Relation,
    types: string | string[],
    callback: Closure | null,
): QueryBuilder

orWhereDoesntHaveMorph ​

typescript
// Add a polymorphic relationship count / exists condition to the query with where clauses and an "or".
orWhereDoesntHaveMorph(
    relation: Relation,
    types: string | string[],
    callback: Closure | null,
): QueryBuilder

whereRelation ​

typescript
// Add a basic where clause to a relationship query.
whereRelation(
    relation: Relation,
    column: Column,
    operator: Operator | null,
    value: string | number | null,
): QueryBuilder

orWhereRelation ​

typescript
// Add an "or where" clause to a relationship query.
orWhereRelation(
    relation: Relation,
    column: Column,
    operator: Operator | null,
    value: string | number | null,
): QueryBuilder

whereMorphRelation ​

typescript
// Add a polymorphic relationship condition to the query with a where clause.
whereMorphRelation(
    relation: Relation,
    types: string | string[],
    column: Column,
    operator: Operator | null,
    value: string | number | null,
): QueryBuilder

orWhereMorphRelation ​

typescript
// Add a polymorphic relationship condition to the query with an "or where" clause.
orWhereMorphRelation(
    relation: Relation,
    types: string | string[],
    column: Column,
    operator: Operator | null,
    value: string | number | null,
): QueryBuilder

whereMorphedTo ​

typescript
// Add a morph-to relationship condition to the query.
whereMorphedTo(relation: Relation, model: string, boolean: string): QueryBuilder

whereNotMorphedTo ​

typescript
// Add a not morph-to relationship condition to the query.
whereNotMorphedTo(relation: Relation, model: string, boolean: string): QueryBuilder

orWhereMorphedTo ​

typescript
// Add a morph-to relationship condition to the query with an "or where" clause.
orWhereMorphedTo(relation: Relation, model: string): QueryBuilder

orWhereNotMorphedTo ​

typescript
// Add a not morph-to relationship condition to the query with an "or where" clause.
orWhereNotMorphedTo(relation: Relation, model: string): QueryBuilder