makinacorpus / goat-query
基于PHP到SQL和SQL到PHP类型转换器的Goat SQL查询构建器
Requires
- php: >=7.4
- makinacorpus/profiling: ^1.1.0 || ^2.0.1
- psr/log: ^1.1 || ^2
- symfony/polyfill-php80: ^1.24
Requires (Dev)
- makinacorpus/generated-hydrator-bundle: ^2.0.0
- phpbench/phpbench: ^1.0
- phpunit/phpunit: 9.*
- ramsey/uuid: ^3.8 || ^4
Suggests
- ramsey/uuid: For UUID database column type support
- symfony/console: For using the provided console tool
- dev-master
- 3.0.x-dev
- 3.0.14
- 3.0.13
- 3.0.12
- 3.0.11
- 3.0.10
- 3.0.9
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 3.0.0-alpha14
- 3.0.0-alpha13
- 3.0.0-alpha12
- 3.0.0-alpha11
- 3.0.0-alpha10
- 3.0.0-alpha9
- 3.0.0-alpha8
- 3.0.0-alpha7
- 3.0.0-alpha6
- 3.0.0-alpha5
- 3.0.0-alpha4
- 3.0.0-alpha3
- 3.0.0-alpha2
- 3.0.0-alpha1
- 2.1.x-dev
- 2.1.8
- 2.1.7
- 2.1.6
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.x-dev
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 2.0.0-alpha7
- 2.0.0-alpha6
- 2.0.0-alpha5
- 2.0.0-alpha4
- 2.0.0-alpha3
- 2.0.0-alpha2
- 2.0.0-alpha1
- 1.0.x-dev
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 1.0.0-alpha32
- 1.0.0-alpha31
- 1.0.0-alpha30
- 1.0.0-alpha29
- 1.0.0-alpha28
- 1.0.0-alpha27
- 1.0.0-alpha26
- 1.0.0-alpha25
- 1.0.0-alpha24
- 1.0.0-alpha23
- 1.0.0-alpha22
- 1.0.0-alpha21
- 1.0.0-alpha20
- 1.0.0-alpha19
- 1.0.0-alpha18
- 1.0.0-alpha17
- 1.0.0-alpha16
- 1.0.0-alpha15
- 1.0.0-alpha14
- 1.0.0-alpha13
- 1.0.0-alpha12
- 1.0.0-alpha11
- 1.0.0-alpha10
- 1.0.0-alpha9
- 1.0.0-alpha8
- 1.0.0-alpha7
- 1.0.0-alpha6
- 1.0.0-alpha5
- 1.0.0-alpha4
- 1.0.0-alpha3
- 1.0.0-alpha2
- 1.0.0-alpha1
- dev-converter-rework
- dev-converter-refactor
- dev-binary
This package is not auto-updated.
Last update: 2024-09-19 21:54:44 UTC
README
这是一个基于PHP到SQL和SQL到PHP类型转换器构建的SQL查询构建器。
与PDO
和ext-pgsql
一起工作,并支持官方驱动程序
- 使用
PDO
的MySQL 5.7 - 使用
PDO
的MySQL 8.x - 使用
PDO
的PostgreSQL >= 9.5(直到最新版本) - 使用
ext-pgsql
的PostgreSQL >= 9.5(直到最新版本) (推荐驱动程序) - 使用
PDO
的SQLite >= 3 (实验性) - 通过一些技巧,可以使用
PDO
与任何支持SQL-92
标准的RDBMS。
文档位于./docs/
文件夹中,使用Sphinx生成。
快速入门
安装它
composer require makinacorpus/goat-query
创建连接
$driver = \Goat\Driver\DriverFactory::fromUri('pgsql://username:password@hostname:5432/database?option1=value1&option2=value2');
或者以详细方式创建连接
$driver = new \Goat\Driver\ExtPgSQLDriver(); $driver->setConfiguration( \Goat\Driver\Configuration::fromString( 'pgsql://username:password@hostname:5432/database?option1=value1&option2=value2' ) );
请注意,根据驱动程序,提供的选项将被不同地处理。
然后使用它
$runner = $driver->getRunner(); $platform = $runner->getPlatform(); $queryBuilder = $runner->getQueryBuilder(); if ($platform->supportsReturning()) { $result = $queryBuilder ->insertValues('users') ->columns(['id', 'name']) ->values([1, 'Jean']) ->values([1, 'Robert']) ->returning('*') ->setOption('class', \App\Domain\Model\User::class) ->execute() ; } else { $queryBuilder ->insertValues('users') ->columns(['id', 'name']) ->values([1, 'Jean']) ->values([2, 'Robert']) ->execute() ; $result = $queryBuilder ->select('users') ->where('id', [1, 2]) ->setOption('class', \App\Domain\Model\User::class) ->execute() } foreach ($result as $user) { \assert($user instanceof \App\Domain\Model\User); echo "Hello, ", $user->getName(), " !\n"; }
对于高级文档,请参阅./docs/
文件夹。
路线图
- 2.0 - 将要求提升到PHP 7.4
- 2.1 - 包括MERGE查询支持、功能测试、驱动程序和平台分离,以及许多修复,并弃用了一些1.x方法
- 3.0 - 对SQL编写器、转换器上下文和查询构建器进行了重大改进
- 3.0 - 带来了实验性模式检测器和控制台工具的版本
- 3.1 - 将具有许多快捷方式和糖添加的功能
- 4.0 - 将稳定模式检测器和控制台工具
驱动程序组织
驱动程序
实例负责(按顺序)
- 连接到数据库
- 发送配置
- 检查后端变体和版本以构建平台
它获取连接选项并配置它,然后创建平台。
平台
包含特定于SQL版本的代码,例如查询格式化程序、模式检测器和用户无法配置的其他内容,这些内容可能取决于SQL服务器版本。它处理用户无法直接接触到的所有内容,但SQL服务器有。
运行器
是用户需要的唯一运行时对象
- 执行SQL查询的公共外观
- 持有转换器(可以注入,可能包含用户代码)
- 创建并持有查询构建器
- 管理事务。
它包含用户配置和运行时。运行器对SQL本身一无所知,它只是持有连接,发送请求,并处理迭代器和事务。
换句话说
- 驱动程序连接
- 平台处理SQL方言
- 运行器执行
- 单个运行器实现可以使用不同的平台实现,这是两个实现实际上分离的真实原因。
框架集成
- 在 https://github.com/pounard/goat-query-bundle 中的Symfony捆绑包
升级
从2.x升级到3.x
-
3.x弃用了所有
\Goat\Query\Expression*
类。它们的向后兼容等效项仍然存在,为了使您的代码健壮,请在\Goat\Query\Expression\*Expression
中使用它们的新实现。 -
3.x提供了一套完整的
\Goat\Driver\Query\SqlWriter
接口及其实现的重写。新代码更快,更易于阅读,并且具有更少的依赖项,直接使用该接口的驱动程序开发人员或用户必须适应他们的代码。 -
3.x移除了
\Goat\Query\ArgumentBag
、\Goat\Query\ArgumentList
、\Goat\Query\Value
、\Goat\Query\ValueRepresentation
类和接口,使用这些的人必须适应他们的代码。 -
3.x版本对
\Goat\Converter\ValueConverterInterface
合约进行了轻微调整,您需要适应现有的自定义值转换器。 -
3.x完全改变了日期处理方式,对于大多数人来说,这应该不会引起注意并修复许多错误。
-
总的来说,这将是最后一个提供向后兼容的已弃用代码的版本,您可以通过遵循弃用通知以及使用
@deprecated
PHP文档注解来修复现有代码。 -
对于大多数用户来说,升级将是透明的,不会造成任何问题。
从1.x升级到2.x
-
2.x引入了一个面向用户的单一变更:最初,Symfony扩展由makinacorpus/goat包提供,现在它作为独立的makinacorpus/goat-query-bundle包捆绑提供。
-
2.x改变了内部运行器的实现,并引入了一个新的
\Goat\Driver\
命名空间,该命名空间专注于低级驱动实现。驱动开发者需要将他们的代码转换为新的API。
这也会引入makinacorpus/goat
版本在3.0.0
之前的一个依赖冲突,如果您正在使用它,您需要升级。
查询构建器、数据库运行器和结果迭代器的最终用户API没有变化。