Пожалуйста, будьте осторожны: это пока нестабильная версия без покрытия Unit-тестами!
Вспомогательные инструменты для работы с Битрикс D7 ORM.
- Генерация описания полей таблицы хранения немножественных свойств элемента инфоблока.
-
Установить через composer:
composer require webarchitect609/bitrix-orm-tools
-
Добавить подключение автозагрузчика composer в самое начало файла init.php
require_once $_SERVER['DOCUMENT_ROOT'] . '/../../vendor/autoload.php';
Чтобы воспользоваться функциональностью генерации описания немножественных свойств элемента инфоблока:
- отнаследоваться от
\WebArch\BitrixOrmTools\Iblock\Property\DynamicSinglePropertiesTable
и объявить методgetIblockId()
; - при объявлении
Bitrix\Main\Entity\ReferenceField
(илиBitrix\Main\ORM\Fields\Relations\Reference
) воспользоваться созданным классом;
use Bitrix\Iblock\ElementTable;
use Bitrix\Main\Entity\ReferenceField;
use Bitrix\Main\ORM\Query\Join;
use WebArch\BitrixOrmTools\Iblock\Property\DynamicSinglePropertiesTable;
class NewsSinglePropTable extends DynamicSinglePropertiesTable
{
public static function getIblockId(): int
{
return 123;
}
}
ElementTable::query()
->registerRuntimeField(
new ReferenceField(
'NEWS_PROP',
NewsSinglePropTable::class,
Join::on('this.ID', 'ref.IBLOCK_ELEMENT_ID'),
['join_type' => 'INNER']
)
);
Если используются пользовательские свойства элемента инфоблока, может возникать ошибка
Unsupported property type `S` with user type `Vendor\Package\NutritionValueProperty`
Можно дописать необходимый конвертор и вернуть его, переопределив статический метод
\WebArch\BitrixOrmTools\Iblock\Property\DynamicSinglePropertiesTable::getConverterList()
и добавив к уже
существующему списку конверторов.
Другой вариант - включить игнорирование таких ошибок при помощи метода
\WebArch\BitrixOrmTools\Iblock\Property\DynamicSinglePropertiesTable::ignoreUnsupportedPropertyType()
- Обновить
webarchitect609/bitrix-user-type >= 0.9.0
- Предпочтительнее заменить в клиентском коде
\WebArch\BitrixOrmTools\Field\TimeField
на\WebArch\BitrixUserPropertyType\Field\TimeField
. Временное решение: вinit.php
после подключенияvendor/autoload.php
активировать скрипт установки алиасаvendor/webarchitect609/bitrix-user-type/src/inc/aliases.php
require_once 'vendor/webarchitect609/bitrix-user-type/src/inc/aliases.php';