# QueryBuilder ## Requirements + PHP 8+ (Should work with 7+, but haven't tested it). + `Psr\Container\ContainerInterface` implementation like [`php-di/php-di`](https://packagist.org/packages/php-di/php-di). ## Installation ```composer.json``` ``` { ... "repositories": [ { "type": "git", "path": "https://git.provm.cl/ProVM/query_builder.git" } ], "require": { ... "provm/query_builder": "^1.0", ... }, ... } ``` ## Setup ``` $container->set(ProVM\Concept\Database\Query\Select::class, function(Psr\Container\ContainerInterface $container) { return $container->get(ProVM\Database\Query\MySQL\Select::class); }); $container->set(ProVM\Concept\Database\Query\Insert::class, function(Psr\Container\ContainerInterface $container) { return $container->get(ProVM\Database\Query\MySQL\Insert::class); }); $container->set(ProVM\Concept\Database\Query\Update::class, function(Psr\Container\ContainerInterface $container) { return $container->get(ProVM\Database\Query\MySQL\Update::class); }); $container->set(ProVM\Concept\Database\Query\Delete::class, function(Psr\Container\ContainerInterface $container) { return $container->get(ProVM\Database\Query\MySQL\Delete::class); }); ``` ## Usage QueryBuilder ``` include_once 'vendor/autoload.php'; $qb = new QueryBuilder(); $query = $qb->select(<*columns>); $query = $qb->insert(); $query = $qb->update(
); $query = $qb->delete(
); ``` ### Queries #### Select `SELECT FROM
[ JOIN ON
. = .][ WHERE [ AND|OR ]][ GROUP BY [, ]][ HAVING [ AND|OR ]][ ORDER BY ASC|DESC[, ASC|DESC]]` Mysql also include `[ LIMIT [ OFFSET ]]` ``` $query = $qb->select(); // use '*' for columns or $query = $qb->select()->select(['id', 'column1',]); or $query = $qb->select(['id', 'column1',]); $query->from('table1'); $query->joins([['table2', 'table1.column1 = table2.column21'],]); $query->where(['table2.column22 = 10',]); $query->groupBy(['table1.column1',]); $query->having(['table1.column1 < 10',]); $query->orderBy(['table2.column22',]); $query->limit(10, 10); ``` #### Insert `INSERT INTO
[ ()]` with two options `
SET = [, = ][ WHERE [ AND|OR ]]` ``` $query = $qb->update('table'); $query->set([['column1', 10],]); or $query->set([['column' => 'column1', 'value' => 10],]); $query->where(['column2 = 10', ]); ``` #### Delete `DELETE FROM
WHERE [ AND|OR ]` ``` $query = $qb->delete('table'); $query->where(['column1 = 10',]); ``` Pass the query to a string ``` $str = $query->build(); or $str = "{$query}"; ``` ## TODO Implement other databases