Документация для разработчиков
Темная тема

registerRuntimeField

\Bitrix\Main\Entity\Query public
\Bitrix\Main\Entity\Query::registerRuntimeField(
	string|null $name,
	array|\Bitrix\Main\Entity\Field $fieldInfo
);

Нестатический метод добавляет поле во время выполнения запроса. Создаётся динамически, в противном случае описывается статически в карте.

Параметры

ПараметрОписаниеВерсия
$name
$fieldInfo

Примеры



Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Вячеслав Докукин
Сообщение не промодерировано, возможны ошибки и неточности.
RIGHT JOIN с указанием в join дополнительно where по активности элемента ИБ
Код
->registerRuntimeField(
    null,
    new ReferenceField(
        'LK',
        ElementLkabTable::class,
        Join::on('this.UF_LK_ID', 'ref.ID')->where('ref.ACTIVE', 'Y'),
        ['join_type' => 'RIGHT']
    )
0
Вячеслав Докукин
Сообщение не промодерировано, возможны ошибки и неточности.
Пример получения всех активных элементов ИБ привязанных к сделке через св-во тип "Привязка к элементу"
Код
use Bitrix\Crm\DealTable;
use Bitrix\Iblock\Elements\ElementLkabTable;
use Bitrix\Main\Entity\ReferenceField;
use Bitrix\Main\Entity\Query\Join;

$rows = DealTable::query()
    ->whereNotNull('UF_LK_ID')
    ->where('LK.ACTIVE', 'Y')
    ->setSelect([
        'UF_LK_ID'
    ])
    ->setGroup(['UF_LK_ID'])
    ->registerRuntimeField(
        null,
        new ReferenceField(
            'LK',
            ElementLkabTable::class,
            Join::on('this.UF_LK_ID', 'ref.ID')
        )
    )
    ->exec()->fetchAll();
$res = [];
foreach ($rows as $row) {
    $res[] = $row['UF_LK_ID'];
}
0
Вячеслав Докукин
Сообщение не промодерировано, возможны ошибки и неточности.
Пример получения данных из нескольких таблиц b_catalog_currency_rate и b_catalog_currency_lang
Код
use Bitrix\Currency\CurrencyRateTable;
use Bitrix\Currency\CurrencyLangTable;
use Bitrix\Main\Entity\ReferenceField;
use Bitrix\Main\Entity\Query\Join;

$this->arParams['CURRENCY_FROM'] = 'BYN';

$rows = CurrencyRateTable::query()
    ->where('CURRENCY', $this->arParams['CURRENCY_FROM'])
    ->where('CURRENCY_LANG.LID', LANGUAGE_ID)
    ->where('BASE_CURRENCY_LANG.LID', LANGUAGE_ID)
    ->setSelect([
        'CURRENCY',
        'DATE_RATE',
        'BASE_CURRENCY',
        'RATE_CNT',
        'RATE',
        'CURRENCY_FROM_FULL_NAME' => 'CURRENCY_LANG.FULL_NAME',
        'CURRENCY_TO_FULL_NAME' => 'BASE_CURRENCY_LANG.FULL_NAME',
    ])->registerRuntimeField(
        null,
        new ReferenceField(
            'CURRENCY_LANG',
            CurrencyLangTable::class,
            Join::on('this.CURRENCY', 'ref.CURRENCY')
        )
    )->registerRuntimeField(
        null,
        new ReferenceField(
            'BASE_CURRENCY_LANG',
            CurrencyLangTable::class,
            Join::on('this.BASE_CURRENCY', 'ref.CURRENCY')
        )
    )
    ->exec();

foreach ($rows as $row) {
    dump($row);
}

в выхлопе будет
Код
 array:12 [▼
  "CURRENCY" => "BYN"
  "DATE_RATE" => Bitrix\Main\Type\Date {#2270 ▶}
  "BASE_CURRENCY" => "RUB"
  "RATE_CNT" => "1"
  "RATE" => "28.8554"
  "CURRENCY_FROM_FULL_NAME" => "Белорусский рубль"
  "CURRENCY_TO_FULL_NAME" => "Российский рубль"
  "UALIAS_0" => "3"
  "UALIAS_1" => "BYN"
  "UALIAS_2" => "ru"
  "UALIAS_3" => "RUB"
  "UALIAS_4" => "ru"
]
2
Константин Савин
Сообщение не промодерировано, возможны ошибки и неточности.
$doctors = Models\Lists\DoctorsPropertyValuesTable::query()
   ->setSelect(['*', 'FIRST_NAME' => 'ELEMENT.NAME', 'MED_ID.*'])
->registerRuntimeField(
       null,
       new \Bitrix\Main\Entity\ReferenceField(
           'MED_ID',
          \Models\Lists\MedPropertyValuesTable::getEntity(),
           ['=this.ELEMENT.NAME' => 'ref.IBLOCK_ELEMENT_ID']
       )
   )
   ->fetchAll();
© «Битрикс», 2001-2025, «1С-Битрикс», 2025
Наверх