PHP code example of beta / bx.data.provider

1. Go to this page and download the library: Download beta/bx.data.provider library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

beta / bx.data.provider example snippets


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 файл

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