composer require andrew-gos/query-builderuse AndrewGos\QueryBuilder\Grammar\DefaultGrammar;
use AndrewGos\QueryBuilder\Query\Select\SelectQuery;
$grammar = new DefaultGrammar();
$query = (new SelectQuery())
->select(['id', 'name', 'email'])
->from(['users'])
->where(['active' => true]);
$built = $grammar->buildSelectQuery($query);
echo $built->sql;
// SELECT "id", "name", "email" FROM "users" WHERE "active" IS TRUEEvery query flows through a consistent pipeline:
- Build a Query object — use one of the 6 query classes:
SelectQuery,InsertQuery,UpdateQuery,DeleteQuery,ValuesQuery,MergeQuery. - Configure clauses — call fluent methods like
->select(),->from(),->where(),->join(), etc. - Build with a Grammar — pass the query to a grammar's
buildXxxQuery()method. The grammar returns aBuiltQueryDTO. - Execute — use the
BuiltQuery->sqlstring andBuiltQuery->paramsarray with your database driver (PDO, etc.).
$pdo = new PDO('pgsql:host=localhost;dbname=mydb');
$stmt = $pdo->prepare($built->sql);
$stmt->execute($built->params);
$rows = $stmt->fetchAll();| Dialect | Class | Identifier Escaping |
|---|---|---|
| ANSI SQL / Default | DefaultGrammar |
Double quotes ("table") |
| MySQL | MySqlGrammar |
Backticks (`table`) |
| PostgreSQL | PgSqlGrammar |
Double quotes ("table") + dialect extensions |
Each grammar also requires the corresponding query class for dialect-specific features.
use AndrewGos\QueryBuilder\Grammar\MySql\MySqlGrammar;
use AndrewGos\QueryBuilder\Query\Select\MySql\MySqlSelectQuery;
$grammar = new MySqlGrammar();
$query = (new MySqlSelectQuery())
->select(['id'])
->from(['users'])
->highPriority() // MySQL-specific
->sqlCalcFoundRows(); // MySQL-specific
echo $grammar->buildSelectQuery($query)->sql;
// SELECT HIGH_PRIORITY SQL_CALC_FOUND_ROWS `id` FROM `users`- Learn all query types available.
- Explore the expression system for advanced conditions.
- Check dialect specifics for MySQL and PostgreSQL features.