beta / bx.model.fetcher.ext
扩展获取器
1.1.0
2024-02-26 10:43 UTC
Requires
- beta/bx.data.provider: ^1.4
- beta/bx.model: ^1.0
This package is auto-updated.
Last update: 2024-09-29 14:52:25 UTC
README
- DataProviderFetcher - 用于处理数据提供者
- DataProviderMultiFetcher - 用于处理与源模型多个属性相关联的数据提供者
- EnumDataProviderFetcher - 用于处理信息块属性列表
- FileDataProviderFetcher - 用于处理b_file中的记录
- HlBlockDataProviderFetcher - 用于处理hl块元素
- IblockPropsDataProviderFetcher - 用于处理信息块用户属性值
- IblockPropsDefinitionFetcher - 用于处理信息块用户属性描述
- MultiIblockPropsDataProviderFetcher - 用于处理与源模型多个属性相关联的信息块用户属性值
- SectionDataProviderFetcher - 用于处理信息块分区
- UserDataProviderFetcher - 用于处理用户记录
DataProviderFetcher工作示例(作为集合装饰器)
use Bx\Model\Fetcher\Ext\DataProviderFetcher; use BX\Data\Provider\DataManagerDataProvider; use Bitrix\Main\UserTable; use Bx\Model\Fetcher\Ext\KeyInfo; use Data\Provider\QueryCriteria; use Data\Provider\Interfaces\CompareRuleInterface; $userDataProvider = new DataManagerDataProvider(UserTable::class); $keyInfo = new KeyInfo(); $keyInfo->foreignKey = 'userId'; // ключ модели для связи с данными из провайдера данных $keyInfo->keyForSave = 'user'; // ключ для сохранения связываемых данных $query = new QueryCriteria(); $query->addCompareRule('ACTIVE', CompareRuleInterface::EQUAL, 'Y'); // выбираем только активных пользователей $userFetcher = new DataProviderFetcher( $userDataProvider, $keyInfo, 'ID', $query ); $customService = new CustomService(); $someCollection = $customService->getList(['select' => ['id', 'name', 'userId']]); $firstElementCollection = $someCollection->first(); $firstElementCollection->hasValueKey('user'); // false $userFetcher->fill($someCollection); // загружаем данные о пользователях $firstElementCollection = $someCollection->first(); $firstElementCollection->hasValueKey('user'); // true $userData = $firstElementCollection->getValueByKey('user'); echo $firstElementCollection->getValueByKey('userId'); // 1 echo $userData['ID']; // 1 echo $userData['NAME']; echo $userData['LAST_NAME'];
DataProviderFetcher工作示例(作为服务的一部分)
use Bx\Model\BaseLinkedModelService; use Bx\Model\Fetcher\Ext\DataProviderFetcher; use BX\Data\Provider\DataManagerDataProvider; use Bitrix\Main\UserTable; use Bx\Model\Fetcher\Ext\KeyInfo; use Data\Provider\QueryCriteria; use Data\Provider\Interfaces\CompareRuleInterface; use Data\Provider\Interfaces\DataProviderInterface; class CustomService extends BaseLinkedModelService { private DataProviderInterface $userDataProvider; public function __construct(DataProviderInterface $userDataProvider) { $this->userDataProvider = $userDataProvider; } protected function getLinkedFields(): array { $keyInfo = new KeyInfo(); $keyInfo->foreignKey = 'userId'; // ключ модели для связи с данными из провайдера данных $keyInfo->keyForSave = 'user'; // ключ для сохранения связываемых данных $query = new QueryCriteria(); $query->addCompareRule('ACTIVE', CompareRuleInterface::EQUAL, 'Y'); // выбираем только активных пользователей $userFetcher = new DataProviderFetcher( $this->userDataProvider, $keyInfo, 'ID', $query ); $userFetcher->setCompareCallback(function (CusomModel $model, array $linkedData) { return $model->isImportant() && $model->getUserId() === $linkedData['ID']; }); // можем установить произвольное сопоставление данных с моделью $userFetcher->setModifyCallback(function (array $linkedData): array { return [ 'id' => $linkedData['ID'], 'fullName' => trim(implode( ' ', [ $linkedData['LAST_NAME'], $linkedData['NAME'], $linkedData['SECOND_NAME'] ] )), ]; }); // модификация данных перед привязкой к модели return [ 'user' => $userFetcher ]; } protected function getInternalList(array $params, UserContextInterface $userContext = null): ModelCollection { // Выборка коллекции } }