Задать вопрос
RecentForce99
@RecentForce99

Как получить свойства ИБ 2.0 через битрикс ORM?

Всем привет! Подскажите пожалуйста как можно получить значение свойств из таблицы b_iblock_element_prop_sNN.

Вот мой код для ИБ 1.0

$elements = [];
        $listElements = ElementTable::getList([
            'select' => selectElements(),
            'runtime' => runtimeElements(),
            'filter' => filterElements(),
            'order' => orderElements(),
            'group' => groupElements(),
        ]);
        while ($tmpElement = $listElements->fetch()){
            $elements[] = $tmpElement;
        }

function selectElements(): array
    {
        return [
            'DARK_PHOTO_VALUE' => 'DARK_PHOTO',
            'LIGHT_PHOTO_VALUE' => 'LIGHT_PHOTO',
        ];
    }

function filterElements(): array {
        return [
            'IBLOCK_ID' => $iblockId,
            'ACTIVE' => 'Y',
        ];
}

  protected function runtimeElements() : array{
        return [
            new Entity\ReferenceField(
                'DARK_PHOTO',
                \Bitrix\Iblock\ElementPropertyTable::class,
                Query\Join::on('this.ID', 'ref.IBLOCK_ELEMENT_ID')
                    ->where("ref.IBLOCK_PROPERTY_ID", '=', $this->getPropertyDarkPhotoId())
            ),
            new Entity\ReferenceField(
                'LIGHT_PHOTO',
                \Bitrix\Iblock\ElementPropertyTable::class,
                Query\Join::on('this.ID', 'ref.IBLOCK_ELEMENT_ID')
                    ->where("ref.IBLOCK_PROPERTY_ID", '=', $this->getPropertyLightPhotoId())
            ),
        ];
    }

function getPropertyDarkPhotoId()
{
        if($id = $this->getPropertyInfo('DARK_PHOTO')['ID'])
            return $id;
        return 0;
}

function getPropertyLightPhotoId()
{
      if($id = $this->getPropertyInfo('LIGHT_PHOTO')['ID'])
          return $id;
      return 0;
}
  • Вопрос задан
  • 357 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
RecentForce99
@RecentForce99 Автор вопроса
Опять всё сам понял.

Для реализации подобного функционала надо создать свою сущность.
Название файла должно быть как название класса, но в нижнем регистре.

//Файл contactspropertytable.php

//Обязательно наследует DataManager
class ContactsPropertyTable extends DataManager
{
    // Не обязательно
    private static int $tableID, $propertyID;

     // Не обязательно
    public function __construct($tableID, $propertyID)
    {
        self::$propertyID = $propertyID;
        self::$tableID = $tableID;
    }

    public static function getTableName()
    {
        return 'b_iblock_element_prop_s'.self::$tableID;
    }

    public static function getMap()
    {
        return [
            (new IntegerField('IBLOCK_ELEMENT_ID'))
                ->configurePrimary(true),

            new StringField('PROPERTY_'.self::$propertyID),
        ];
    }
}


//Файл contacts.php своего модуля
  protected function runtimeElements(): array
    {
        new ContactsPropertyTable($this->iblockId, $this->getPropertyLinkId());
        return [
            new Entity\ReferenceField(
                "LINK",
                ContactsPropertyTable::class,
                Query\Join::on('this.ID', 'ref.IBLOCK_ELEMENT_ID')
            ),
        ];
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы