beta/bx.data.provider

Bitrix 数据提供者

安装次数: 1,016

依赖: 3

建议者: 0

安全: 0

星星: 2

关注者: 2

分支: 3

开放问题: 2

类型:bitrix-module

1.20.1 2024-08-14 16:27 UTC

README

扩展 beta/data.provider 库用于 Bitrix。该模块包括以下提供者实现

  • IblockDataProvider - 用于处理信息块数据的提供者
  • SectionIblockDataProvider - 用于处理信息块部分数据的提供者
  • HlBlockDataProvider - 用于处理 hl 块数据的提供者
  • DataManagerDataProvider - 用于处理 Bitrix 任意数据管理器的提供者(DataManager 类的子类)
  • BxConnectionDataProvider - 用于通过 Bitrix 连接处理数据的提供者,需要指定查询构造器和连接名称
  • UserDataProvider - 用于处理 Bitrix 用户的提供者

示例:将信息块数据导出到 json 文件

use BX\Data\Provider\IblockDataProvider;
use Data\Provider\Providers\JsonDataProvider;
use Data\Provider\DefaultDataMigrator;
use Data\Provider\QueryCriteria;
use Data\Provider\Interfaces\QueryCriteriaInterface;
use Data\Provider\Interfaces\CompareRuleInterface;

$newsProvider = new IblockDataProvider(
    'content',                              // передаем тип инфоблока
    'news'                                  // передаем символьный код инфоблока
);

$newsProvider->setMapperForRead(function (array $data): array {     // задаем маппер данных при запросе данных от провайдера
    return [
        'id' => (int)$data['ID'],
        'name' => $data['NAME'],
        'code' => $data['CODE'],
        'content' => $data['DETAIL_TEXT'],
    ];
});

$targetJsonProvider = new JsonDataProvider(
    $_SERVER['DOCUMENT_ROOT'].'/upload/news.json',  // указываем путь к файлу для сохранения
    'id'                                            // указываем имя первичного ключа
);

$migrator = new DefaultDataMigrator(                // создаем объект для обмена данными
    $newsProvider,                                  // источник данных
    $targetJsonProvider                             // приемник данных
);

$queryNews = new QueryCriteria();
$queryNews->addCriteria('ACTIVE', CompareRuleInterface::EQUAL, 'Y');    // сохранять в json файл будем только активные элементы
$exportResult = $migrator->runUpdate(
    $queryNews,         // передаем фильтр для источника данных
    'ID'                // здесь указываем либо ключ для сопоставления данных с первичным ключом приемника данных или же анонимную функцию вида function(array $dataItem): QueryCriteriaInterface
);

$exportResult->hasErrors();             // есть ли ошибки
$exportResult->getErrors();             // список ошибок
$exportResult->getSourceData();         // данные для экспорта полученные от источника
$exportResult->getUnimportedDataList(); // данные которые не удалось сохранить в json файл

BxQueryAdapter - Bitrix 查询参数适配器,使用示例

use BX\Data\Provider\BxQueryAdapter;
use Data\Provider\QueryCriteria;
use Data\Provider\Providers\JsonDataProvider;
use Data\Provider\Interfaces\CompareRuleInterface;

$bxParams = [
    'select' => ['NAME', 'CODE', 'ID'],
    'filter' => [   
        '=ACTIVE' => 'Y',
        [
            'LOGIC' => 'OR',
            [
                '=NAME' => 'test',
            ],
            [
                '=NAME' => 'other',
            ],
        ],
    ],
    'limit' => 10,
];

$bxQuery = BxQueryAdapter::initFromArray($bxParams);
$jsonProvider = new JsonDataProvider(
    $_SERVER['DOCUMENT_ROOT'].'/users.json',    // указываем путь к json файлу
    'id'                                        // указываем первичный ключ
);

$jsonProvider->getData($bxQuery->getQuery());   // данные из json файла

$newQuery = new QueryCriteria();
$newQuery->setSelect(['NAME', 'CODE', 'ID']);
$newQuery->setLimit(10);
$compareRule = $newQuery->addCriteria('ACTIVE', CompareRuleInterface::EQUAL, 'Y');
$compareRule->and('NAME', CompareRuleInterface::EQUAL, 'test')
    ->or('NAME', CompareRuleInterface::EQUAL, 'other');

$newBxQuery = BxQueryAdapter::init($newQuery);
$newBxQuery->toArray();     // результат будет аналогичен $bxParams

CLI

模块安装后,在项目根目录下将添加可执行文件 dpcli(如果项目之前未安装 beta/bx.cli 模块,则命令将被添加到公共可执行文件 bxcli 中)。

此接口提供生成执行导入、导出和生成数据的命令。这些文件是模板,即生成的文件代码需要根据需求进行编辑。

创建导出任务的命令

  • ./dpcli dp:hlexport [hl 块代码] [数据导出文件路径.json|csv|xml] - 导出指定 hl 块的数据,支持 json、csv 和 xml 格式
  • ./dpcli dp:iblockexport [信息块类型] [信息块代码] [数据导出文件路径.json|csv|xml] - 导出指定信息块元素,支持 json、csv 和 xml 格式
  • ./dpcli dp:sectionexport [信息块类型] [信息块代码] [数据导出文件路径.json|csv|xml] - 导出指定信息块部分,支持 json、csv 和 xml 格式
  • ./dpcli dp:tableexport [表名] [数据导出文件路径.json|csv|xml] - 从指定表导出记录,支持 json、csv 和 xml 格式
  • ./dpcli dp:userexport [数据导出文件路径.json|csv|xml] - 导出 Bitrix 用户,支持 json、csv 和 xml 格式

创建导入任务的命令

  • ./dpcli dp:hlimport [hl 块代码] [数据导入文件路径.json|csv|xml] - 从指定文件导入数据到指定 hl 块,支持 json、csv 和 xml 格式
  • ./dpcli dp:iblockimport [信息块类型] [信息块代码] [数据导入文件路径.json|csv|xml] - 从指定文件导入元素到指定信息块,支持 json、csv 和 xml 格式
  • ./dpcli dp:sectionimport [信息块类型] [信息块代码] [数据导入文件路径.json|csv|xml] - 从指定文件导入部分到指定信息块,支持 json、csv 和 xml 格式
  • ./dpcli dp:tableimport [表名] [数据导入文件路径.json|csv|xml] - 将记录导入指定表,支持 json、csv 和 xml 格式
  • ./dpcli dp:userimport [hl 块代码] [数据导入文件路径.json|csv|xml] - 从指定文件导入用户,支持 json、csv 和 xml 格式

创建生成数据任务的命令(项目中必须安装 dev 依赖 fzaninotto/faker)

  • ./dpcli dp:hlgen [hl 块代码] [生成的记录数量] - 为指定 hl 块生成数据
  • ./dpcli dp:iblockgen [信息块类型] [信息块代码] [生成的记录数量] - 为指定信息块生成元素
  • ./dpcli dp:sectiongen [信息块类型] [信息块代码] [生成的记录数量] - 为指定信息块生成分区
  • ./dpcli dp:tablegen [表名] [生成的记录数量] - 为指定表生成记录
  • ./dpcli dp:usergen [生成的记录数量] - 生成用户

所有任务文件都保存在目录 local/dp/tasks 中。可以使用类似以下命令启动任务:

./dpcli dp:run --type=export -c UserGen -v --new

其中

  • --type=export - 可选参数,指定要执行的任务类型,可以接受值:export、import 和 generate,如果未指定参数,则执行所有类型任务
  • -c UserGen - 可选参数,执行的任务类名,此参数允许执行特定任务
  • -v 或 --verbose - 可选参数,详细输出任务结果
  • --new - 可选参数,如果指定,则只执行新任务(在当前环境中之前未执行的任务)