ridaamirini/phpquerybuilder

一个基于FluentPDO的快速、小巧的SQL构建器

0.1.2 2017-08-31 09:14 UTC

This package is not auto-updated.

Last update: 2024-09-21 02:15:06 UTC


README

Build Status Minimum PHP Version Latest Stable Version Latest Unstable Version Code Climate Total Downloads MIT licensed composer.lock

一个快速、小巧的基于 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 允许目录
  • 添加单元测试
  • 首次发布

许可证

MIT licensed