ridaamirini / phpquerybuilder
一个基于FluentPDO的快速、小巧的SQL构建器
0.1.2
2017-08-31 09:14 UTC
Requires
- php: ^7.0
- fpdo/fluentpdo: 1.1.*
- mockery/mockery: 0.9.9
- symfony/console: 3.3.8
Requires (Dev)
- doctrine/instantiator: ^1.0.2
- phpunit/phpunit: ^6.3
This package is not auto-updated.
Last update: 2024-09-21 02:15:06 UTC
README
一个快速、小巧的基于 FluentPDO 的SQL构建器
功能
- 简单逐步创建查询
- 智能连接构建器
- 构建SELECT、INSERT、UPDATE & DELETE查询
- 小巧且快速
- 智能IDE中的类型提示和代码补全
- 需要PHP 7.0+
- PHP 5.6+ 兼容性即将推出
安装
Composer
在您的 composer.json
中添加
"require": {
...
"ridaamirini/phpquerybuilder": "^0.1.1"
}
然后使用 composer update
更新您的依赖关系。
或者
对于最新版本
composer require ridaamirini/phpquerybuilder:dev-master
开始使用
PHPQueryBuilder易于使用
QueryBuilder::create()->select('article') ->where('published_at > ?', 1) ->orderBy('published_at DESC') ->limit(5) ->getQuery();
输出查询是
SELECT article.* FROM article WHERE published_at > 1 ORDER BY published_at DESC LIMIT 5
智能连接构建器(如何构建查询)
如果您想连接表,可以使用完整的SQL连接语法。例如,我们想显示带有作者姓名的文章列表
$query = QueryBuilder::create()->select('article') ->leftJoin('user ON user.id = article.user_id') ->select('user.name') ->getQuery();
它并不那么聪明,对吧? ;-) 如果您的数据库使用约定来命名主键和外键,您只需写
$query = QueryBuilder::create()->select('article')->leftJoin('user')->select('user.name')->getQuery();
更聪明吗?也许。但 最佳实践是不要写任何连接
$query = QueryBuilder::create()->select('article')->select('user.name')->getQuery();
所有三个命令创建相同的查询
SELECT article.*, user.name FROM article LEFT JOIN user ON user.id = article.user_id
简单的CRUD查询示例
SELECT
$query = QueryCollection::create()->select('article')->where('id', 1)->getQuery(); // or shortly if you select one row by primary key $query = QueryCollection::create()->from('user', 1)->getQuery();
INSERT
$values = ['title' => 'article 1', 'content' => 'content 1']; $query = QueryCollection::create()->insert('article')->values($values)->getQuery(); // or shortly $query = QueryCollection::create()->insert('article', $values)->getQuery();
UPDATE
$set = ['published_at' => new QueryBuilderLiteral('NOW()')]; $query = QueryCollection::create()->update('article')->set($set)->where('id', 1)->getQuery(); // or shortly if you update one row by primary key $query = QueryCollection::create()->update('article', $set, 1)->getQuery();
DELETE
$query = QueryCollection::create()->delete('article')->where('id', 1)->getQuery(); // or shortly if you delete one row by primary key $query = QueryCollection::create()->delete('article', 1)->getQuery();
CRUD查询Collection示例和PHPQueryBuilder CLI
初始化配置文件
$ vendor/bin/phpqb init
插入您的值(phpqb.json)
{ "folder": [ { "from": "./test", "to": "./db" } ], "files": [ { "from": "./test.php", "to": "./db_2" } ], "excludes": [ { "path": "./test/toExclude.php" }, { "path": "./test/test_exclude" } ], "defaultDestination": "./path/to/default" }
使用配置文件运行
$ vendor/bin/phpqb dump
OR
$ vendor/bin/phpqb dump --config
使用路径运行
$ vendor/bin/phpqb dump --collection /path/to/collection.php > collection.sql
OR
$ vendor/bin/phpqb dump -c /path/to/collection.php --filename /path/to/output/output.sql
示例文件
<?php use App\Builder\QueryBuilder; use App\Schema\QueryCollection; $collection = new QueryCollection(); //SELECT QueryCollection::create()->select('article')->where('id', 1)->collect($collection); //INSERT $values = ['title' => 'article 1', 'content' => 'content 1']; $query = QueryCollection::create()->insert('article')->values($values)->collect($collection); //UPDATE $set = ['published_at' => 'yesterday']; $query = QueryCollection::create()->update('article')->set($set)->where('id', 1)->getQuery(); //DELETE QueryCollection::create()->delete('article')->where('id', 1)->collect($collection); return $collection;
待办事项
- 独立QueryBuilder(不使用FluentPDO)
- PHP 5.6+ 兼容性
- phpqb.json JSON lint
- 命令 phpqb dump -c ... -f 允许目录
- 添加单元测试
- 首次发布