diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..a78b9f7 --- /dev/null +++ b/Readme.md @@ -0,0 +1,118 @@ +# 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 diff --git a/composer.json b/composer.json index a983212..7cfe75d 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,6 @@ } ], "require": { - "psr/container": "^2.0" }, "autoload": { "psr-4": {