QueryBuilder<T> class

Generic Query Builder.

Implemented types

Constructors

QueryBuilder(DatabaseConnection connection, Grammar grammar, String table, {T modelFactory(Map<String, dynamic>)?})

Properties

bindings List
no setteroverride
columns List
no setteroverride
connection DatabaseConnection
final
grammar Grammar
final
hashCode int
The hash code for this object.
no setterinherited
modelFactory → T Function(Map<String, dynamic>)?
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
table String
no setteroverride
wheres List<Map<String, dynamic>>
no setter

Methods

addSelect(List<String> columns) QueryBuilderInterface<T>
Add more columns to select
override
asStream() Stream<T>
Returns a stream of results for memory-efficient processing.
override
avg(String column) Future<num>
Returns the average of a numeric column.
override
chunk(int size, Future<void> callback(List<T> items)) Future<void>
Process results in chunks
override
chunkById(int size, Future<void> callback(List<T> items), {String column = 'id', String? alias}) Future<void>
Process results in chunks by ID (more efficient for large datasets)
override
clone() QueryBuilderInterface<T>
Clones the current query builder instance.
override
count() Future<int>
Returns total count of matched rows.
override
crossJoin(String table) QueryBuilderInterface<T>
CROSS JOIN
override
cursorPaginate({int perPage = 15, String? cursor, String column = 'id'}) Future<Map<String, dynamic>>
Cursor-based pagination for efficient large dataset navigation
override
decrement(String column, [int amount = 1]) Future<int>
Decrement a column value
override
delete() Future<void>
Deletes rows matching where conditions.
override
distinct([bool distinct = true]) QueryBuilderInterface<T>
SELECT DISTINCT
override
doesntHave(String relation) QueryBuilderInterface<T>
Query without any of the relationship
override
exists() Future<bool>
Returns true if any row matches the query.
override
find(dynamic id, [String column = 'id']) Future<T?>
Find a record by its primary key.
override
findOrFail(dynamic id, [String column = 'id']) Future<T>
Find a record by its primary key or throw an exception.
override
first() Future<T?>
Returns the first row only.
override
forPage(int page, int perPage) QueryBuilderInterface<T>
fromRaw(String sql, [List bindings = const []]) QueryBuilderInterface<T>
Set raw SQL as the FROM clause
override
fromSub(QueryBuilderInterface query, String alias) QueryBuilderInterface<T>
Set a subquery as the FROM clause
override
get() Future<List<T>>
Executes and returns all matching rows.
override
groupBy(String column) QueryBuilderInterface<T>
Adds GROUP BY clause.
override
has(String relation, [String operator = '>=', int count = 1]) QueryBuilderInterface<T>
Query with relationship count
override
having(String column, String operator, dynamic value) QueryBuilderInterface<T>
Adds HAVING clause.
override
increment(String column, [int amount = 1]) Future<int>
Increment a column value
override
incrementEach(Map<String, int> columns, [Map<String, dynamic> extras = const {}]) Future<void>
Increment multiple columns
override
inRandomOrder() QueryBuilderInterface<T>
ORDER BY RAND()
override
insert(Map<String, dynamic> values) Future<int>
Inserts a new row.
override
insertMany(List<Map<String, dynamic>> values) Future<List<int>>
Insert multiple rows at once
override
join(String table, String first, String operator, String second, [String type = 'INNER']) QueryBuilderInterface<T>
INNER JOIN
override
latest([String column = 'created_at']) QueryBuilderInterface<T>
Shorthand for orderBy(column, 'DESC')
override
lazy([int chunkSize = 1000]) Stream<T>
Lazy load results as a stream (alternative to asStream for chunking)
override
leftJoin(String table, String first, String operator, String second) QueryBuilderInterface<T>
LEFT JOIN
override
limit(int count) QueryBuilderInterface<T>
Limits the number of results.
override
lockForUpdate() QueryBuilderInterface<T>
Add exclusive lock (FOR UPDATE) - prevents reads and updates
override
max(String column) Future<int>
Returns the maximum value of a numeric column.
override
min(String column) Future<int>
Returns the minimum value of a numeric column.
override
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
offset(int count) QueryBuilderInterface<T>
Offsets the results (useful with pagination).
override
oldest([String column = 'created_at']) QueryBuilderInterface<T>
Shorthand for orderBy(column, 'ASC')
override
orderBy(String column, {String direction = 'ASC'}) QueryBuilderInterface<T>
Adds ORDER BY clause.
override
orderByRaw(String sql) QueryBuilderInterface<T>
orHaving(String column, String operator, dynamic value) QueryBuilderInterface<T>
Adds OR HAVING clause.
override
orWhere(String column, String operator, dynamic value) QueryBuilderInterface<T>
Adds an OR WHERE clause.
override
orWhereBetween(String column, dynamic start, dynamic end) QueryBuilderInterface<T>
OR WHERE column BETWEEN start AND end
override
orWhereColumn(String column1, String operator, String column2) QueryBuilderInterface<T>
OR WHERE column1 operator column2
override
orWhereDate(String column, String date) QueryBuilderInterface<T>
OR WHERE DATE(column) = date
override
orWhereDay(String column, int day) QueryBuilderInterface<T>
OR WHERE DAY(column) = day
override
orWhereDoesntHave(String relation, [void callback(QueryBuilderInterface query)?]) QueryBuilderInterface<T>
OR version of whereDoesntHave
override
orWhereExists(String callback(QueryBuilderInterface query)) QueryBuilderInterface<T>
OR WHERE EXISTS (subquery)
override
orWhereHas(String relation, [void callback(QueryBuilderInterface query)?, String operator = '>=', int count = 1]) QueryBuilderInterface<T>
OR version of whereHas
override
orWhereIn(String column, List values) QueryBuilderInterface<T>
OR WHERE column IN (values)
override
orWhereJsonContains(String column, dynamic value, [String? path]) QueryBuilderInterface<T>
OR WHERE JSON_CONTAINS
override
orWhereJsonContainsKey(String column, String path) QueryBuilderInterface<T>
OR WHERE JSON_CONTAINS_PATH(column, 'one', path)
override
orWhereJsonDoesntContain(String column, dynamic value, [String? path]) QueryBuilderInterface<T>
OR WHERE NOT JSON_CONTAINS(column, value, path)
override
orWhereJsonLength(String column, String operator, int length, [String? path]) QueryBuilderInterface<T>
OR WHERE JSON_LENGTH(column, path) operator value
override
orWhereLike(String column, String pattern) QueryBuilderInterface<T>
OR WHERE column LIKE pattern
override
orWhereMonth(String column, int month) QueryBuilderInterface<T>
OR WHERE MONTH(column) = month
override
orWhereNested(void callback(QueryBuilderInterface<T> query)) QueryBuilderInterface<T>
Add a nested OR WHERE clause group
override
orWhereNotBetween(String column, dynamic start, dynamic end) QueryBuilderInterface<T>
OR WHERE column NOT BETWEEN start AND end
override
orWhereNotExists(String callback(QueryBuilderInterface query)) QueryBuilderInterface<T>
OR WHERE NOT EXISTS (subquery)
override
orWhereNotIn(String column, List values) QueryBuilderInterface<T>
OR WHERE column NOT IN (values)
override
orWhereNotLike(String column, String pattern) QueryBuilderInterface<T>
OR WHERE column NOT LIKE pattern
override
orWhereNotNull(String column) QueryBuilderInterface<T>
OR WHERE column IS NOT NULL
override
orWhereNull(String column) QueryBuilderInterface<T>
OR WHERE column IS NULL
override
orWhereQuery(void callback(QueryBuilderInterface<T> query)) QueryBuilderInterface<T>
Add a nested OR WHERE clause group (Alias for orWhereNested)
override
orWhereRaw(String sql, [List bindings = const []]) QueryBuilderInterface<T>
Adds a raw SQL OR WHERE clause.
override
orWhereTime(String column, String time) QueryBuilderInterface<T>
OR WHERE TIME(column) = time
override
orWhereYear(String column, int year) QueryBuilderInterface<T>
OR WHERE YEAR(column) = year
override
paginate({int? page = 1, int? perPage = 15}) Future<PaginatedResult<T>>
Returns a paginated result.
override
pluck(String column) Future<List>
Returns a single column values as list.
override
rightJoin(String table, String first, String operator, String second) QueryBuilderInterface<T>
RIGHT JOIN
override
select(List<String> columns) QueryBuilderInterface<T>
Selects specific columns (defaults to *).
override
selectRaw(String sql, [List bindings = const []]) QueryBuilderInterface<T>
override
selectSub(QueryBuilderInterface query, String alias) QueryBuilderInterface<T>
Add a subquery to the SELECT clause
override
sharedLock() QueryBuilderInterface<T>
Add shared lock (FOR SHARE) - prevents updates until transaction completes
override
simplePaginate({int perPage = 15, int page = 1}) Future<Map<String, dynamic>>
Simple pagination without total count (faster)
override
skip(int count) QueryBuilderInterface<T>
Alias for offset.
override
sum(String column) Future<num>
Returns the sum of a numeric column.
override
take(int count) QueryBuilderInterface<T>
Alias for limit.
override
toSql() String
Returns the raw SQL string.
override
toString() String
A string representation of this object.
inherited
union(QueryBuilderInterface<T> query) QueryBuilderInterface<T>
UNION - combines results from two queries (removes duplicates)
override
unionAll(QueryBuilderInterface<T> query) QueryBuilderInterface<T>
UNION ALL - combines results from two queries (keeps duplicates)
override
update(Map<String, dynamic> values) Future<void>
Updates rows matching where conditions.
override
upsert(List<Map<String, dynamic>> values, {required List<String> uniqueBy, List<String>? update}) Future<int>
Insert or update (UPSERT) - MySQL: INSERT ... ON DUPLICATE KEY UPDATE
override
when(bool condition, QueryBuilderInterface<T> builder(QueryBuilderInterface<T> q)) QueryBuilderInterface<T>
Conditionally adds clauses based on condition.
override
where(String column, String operator, dynamic value) QueryBuilderInterface<T>
Adds a basic WHERE clause.
override
whereAfterToday(String column) QueryBuilderInterface<T>
WHERE column date is after today
override
whereAll(Map<String, dynamic> conditions) QueryBuilderInterface<T>
Matches ALL of the conditions
override
whereAny(List<String> columns, String operator, dynamic value) QueryBuilderInterface<T>
Matches ANY of the columns with the given operator and value
override
whereBeforeToday(String column) QueryBuilderInterface<T>
WHERE column date is before today
override
whereBetween(String column, dynamic start, dynamic end) QueryBuilderInterface<T>
WHERE column BETWEEN start AND end
override
whereBetweenColumns(String column, String startColumn, String endColumn) QueryBuilderInterface<T>
WHERE column value is BETWEEN two other columns' values
override
whereColumn(String column1, String operator, String column2) QueryBuilderInterface<T>
WHERE column1 operator column2 (compare two columns)
override
whereDate(String column, String date) QueryBuilderInterface<T>
WHERE DATE(column) = date
override
whereDay(String column, int day) QueryBuilderInterface<T>
WHERE DAY(column) = day
override
whereDoesntHave(String relation, [void callback(QueryBuilderInterface query)?]) QueryBuilderInterface<T>
Query for absence of a relationship
override
whereExists(String callback(QueryBuilderInterface query)) QueryBuilderInterface<T>
WHERE EXISTS (subquery)
override
whereFullText(List<String> columns, String searchTerm, {String mode = 'natural'}) QueryBuilderInterface<T>
Full-text search using MySQL MATCH AGAINST
override
whereFuture(String column) QueryBuilderInterface<T>
WHERE column is in the future
override
whereHas(String relation, [void callback(QueryBuilderInterface query)?, String operator = '>=', int count = 1]) QueryBuilderInterface<T>
Query for existence of a relationship with optional constraints Equivalent to Laravel's whereHas()
override
whereIn(String column, List values) QueryBuilderInterface<T>
WHERE column IN (values)
override
whereInSubquery(String column, String callback(QueryBuilderInterface query)) QueryBuilderInterface<T>
WHERE column IN (subquery)
override
whereJsonContains(String column, dynamic value, [String? path]) QueryBuilderInterface<T>
WHERE JSON_CONTAINS(column, value, path)
override
whereJsonContainsKey(String column, String path) QueryBuilderInterface<T>
WHERE JSON_CONTAINS_PATH(column, 'one', path)
override
whereJsonDoesntContain(String column, dynamic value, [String? path]) QueryBuilderInterface<T>
WHERE NOT JSON_CONTAINS(column, value, path)
override
whereJsonLength(String column, String operator, int length, [String? path]) QueryBuilderInterface<T>
WHERE JSON_LENGTH(column, path) operator value
override
whereLike(String column, String pattern) QueryBuilderInterface<T>
WHERE column LIKE pattern
override
whereMonth(String column, int month) QueryBuilderInterface<T>
WHERE MONTH(column) = month
override
whereNested(void callback(QueryBuilderInterface<T> query)) QueryBuilderInterface<T>
Add a nested WHERE clause group
override
whereNone(Map<String, dynamic> conditions) QueryBuilderInterface<T>
Matches NONE of the conditions
override
whereNotBetween(String column, dynamic start, dynamic end) QueryBuilderInterface<T>
WHERE column NOT BETWEEN start AND end
override
whereNotBetweenColumns(String column, String startColumn, String endColumn) QueryBuilderInterface<T>
WHERE column value is NOT BETWEEN two other columns' values
override
whereNotExists(String callback(QueryBuilderInterface query)) QueryBuilderInterface<T>
WHERE NOT EXISTS (subquery)
override
whereNotIn(String column, List values) QueryBuilderInterface<T>
WHERE column NOT IN (values)
override
whereNotLike(String column, String pattern) QueryBuilderInterface<T>
WHERE column NOT LIKE pattern
override
whereNotNull(String column) QueryBuilderInterface<T>
WHERE column IS NOT NULL
override
whereNull(String column) QueryBuilderInterface<T>
WHERE column IS NULL
override
wherePast(String column) QueryBuilderInterface<T>
WHERE column is in the past
override
whereQuery(void callback(QueryBuilderInterface<T> query)) QueryBuilderInterface<T>
Add a nested WHERE clause group (Alias for whereNested)
override
whereRaw(String sql, [List bindings = const [], String boolean = 'AND']) QueryBuilderInterface<T>
Adds a raw SQL WHERE clause.
override
whereTime(String column, String time) QueryBuilderInterface<T>
WHERE TIME(column) = time
override
whereToday(String column) QueryBuilderInterface<T>
WHERE column date is today
override
whereYear(String column, int year) QueryBuilderInterface<T>
WHERE YEAR(column) = year
override
withAvg(String relation, String column) QueryBuilderInterface<T>
Load relationship average aggregates without loading the full relationships.
override
withCount(dynamic relations) QueryBuilderInterface<T>
Load relationship counts without loading the full relationships.
override
withMax(String relation, String column) QueryBuilderInterface<T>
Load relationship maximum aggregates without loading the full relationships.
override
withMin(String relation, String column) QueryBuilderInterface<T>
Load relationship minimum aggregates without loading the full relationships.
override
withOnly(List<String> relations) QueryBuilderInterface<T>
Replaces the model's defaultRelations with the specified list.
override
without(List<String> relations) QueryBuilderInterface<T>
Excludes specific relations from the model's defaultRelations.
override
withRelations(List relations) QueryBuilderInterface<T>
Eagerly loads relations for the query.
override
withSum(String relation, String column) QueryBuilderInterface<T>
Load relationship sum aggregates without loading the full relationships.
override

Operators

operator ==(Object other) bool
The equality operator.
inherited