makinacorpus/goat-query

基于PHP到SQL和SQL到PHP类型转换器的Goat SQL查询构建器

3.0.14 2023-02-14 10:18 UTC

README

这是一个基于PHP到SQL和SQL到PHP类型转换器构建的SQL查询构建器。

PDOext-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方言
  • 运行器执行
  • 单个运行器实现可以使用不同的平台实现,这是两个实现实际上分离的真实原因。

框架集成

升级

从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没有变化。

历史

源自并提取自https://github.com/pounard/goat