cryptoman3/doctrine-dbal-bulk

Doctrine DBAL 的批量插入和更新

1.x-dev 2023-07-24 12:17 UTC

This package is not auto-updated.

Last update: 2024-09-17 16:00:08 UTC


README

贡献

此仓库为只读状态,若要为 Flow PHP 项目做出贡献,请向 flow monorepo 打开 PR。

合并到 monorepo 的更改将自动传播到子仓库。

描述

Doctrine Bulk 缺少 Doctrine DBAL 的批量 upsert/insert 抽象。

安装

composer require flow-php/doctrine-dbal-bulk:1.x@dev

用法示例

插入

$bulk = Bulk::create();
$bulk->insert(
    $dbalConnection,
    'your-table-name',
    new BulkData([
        ['id' => 1, 'name' => 'Name One', 'description' => 'Description One'],
        ['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two'],
        ['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three'],
    ])
);

更新

$bulk = Bulk::create();
$bulk->update(
    $dbalConnection,
    'your-table-name',
    new BulkData([
        ['id' => 1, 'name' => 'Name One', 'description' => 'Description One'],
        ['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two'],
        ['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three'],
    ]),
    [
        'primary_key_columns' => ['id'],
        'update_columns' => ['name']
    ]
);

支持方言

  • PostgreSQL

添加新方言

Dialect 是该库的基本抽象。
Dialect 的主要作用是基于 BulkData 和提供的 options 准备 SQL 插入/更新语句。

  • $insertOptions
  • $updateOptions

选项是键 => 值映射,没有预定义的结构,允许操作构建 SQL 语句。每个方言都应该定义它自己的选项结构,以支持数据库引擎的功能,包括特定于给定引擎的功能。

QueryFactory 是创建查询的抽象,目前只有一个实现,DbalPlatform。QueryFactory 的 insertOptionsupdateOptions 是所有支持方言提供的选项的组合,其中每个条目都是可选的。

示例: dialect_option?: string

DbalPlatform 是一个工厂,用于检测给定 Doctrine DBAL 平台应使用哪个方言。