Изучаю работу ядра d7 и заинтересовал момент про runtime-поля. Хочу сделать запрос на извлчение полей из 2-х таблиц.
Есть Highload-блок "Голоса". В нём есть 3 поля: ID, UF_ELEMENT_ID, UF_IP_ADDRESS, UF_DATE Есть также другой Highload-блок "Посты". В нём поля: ID, UF_NAME
Нужно составить такой запрос, который бы извлекал данные из Highload-блока "Голоса", но добавлял бы к этим данным поле UF_NAME из Highload-блока "Посты". Связь по полю Голоса.UF_ELEMENT_ID=Посты.ID
На SQL написать не сложно, но интересно, как это делается используя runtime-поля в запросах вида $dbItems = \Bitrix\Highloadblock\HighloadBlockTable::getList
Та документация что есть - очень плохая. Не понятно, что именно нужно передавать в параметр runtime. Само описание метода getList взял отсюда: Ссылка
Классы для каждого Highload-блока сгенерировал из админки. Вот они:
Для Highload-блока "Посты":
Код
namespace Bitrix;
use Bitrix\Main\Localization\Loc,
Bitrix\Main\ORM\Data\DataManager,
Bitrix\Main\ORM\Fields\IntegerField,
Bitrix\Main\ORM\Fields\TextField;
Loc::loadMessages(__FILE__);
/**
* Class Posts
*
* Fields:
* <ul>
* <li> ID int mandatory
* <li> UF_NAME text optional
* </ul>
*
* @package Bitrix\
**/
class Posts extends DataManager
{
/**
* Returns DB table name for entity.
*
* @return string
*/
public static function getTableName()
{
return 'posts';
}
/**
* Returns entity map definition.
*
* @return array
*/
public static function getMap()
{
return [
new IntegerField(
'ID',
[
'primary' => true,
'autocomplete' => true,
'title' => Loc::getMessage('_ENTITY_ID_FIELD')
]
),
new TextField(
'UF_NAME',
[
'title' => Loc::getMessage('_ENTITY_UF_NAME_FIELD')
]
),
];
}
}
Для Highload-блока "Голоса":
Код
namespace Bitrix;
use Bitrix\Main\Localization\Loc,
Bitrix\Main\ORM\Data\DataManager,
Bitrix\Main\ORM\Fields\DatetimeField,
Bitrix\Main\ORM\Fields\FloatField,
Bitrix\Main\ORM\Fields\IntegerField,
Bitrix\Main\ORM\Fields\TextField;
Loc::loadMessages(__FILE__);
/**
* Class Voices
*
* Fields:
* <ul>
* <li> ID int mandatory
* <li> UF_ELEMENT_ID double optional
* <li> UF_IP_ADDRESS text optional
* <li> UF_DATE datetime optional
* </ul>
*
* @package Bitrix\
**/
class Voices extends DataManager
{
/**
* Returns DB table name for entity.
*
* @return string
*/
public static function getTableName()
{
return 'voices';
}
/**
* Returns entity map definition.
*
* @return array
*/
public static function getMap()
{
return [
new IntegerField(
'ID',
[
'primary' => true,
'autocomplete' => true,
'title' => Loc::getMessage('_ENTITY_ID_FIELD')
]
),
new FloatField(
'UF_ELEMENT_ID',
[
'title' => Loc::getMessage('_ENTITY_UF_ELEMENT_ID_FIELD')
]
),
new TextField(
'UF_IP_ADDRESS',
[
'title' => Loc::getMessage('_ENTITY_UF_IP_ADDRESS_FIELD')
]
),
new DatetimeField(
'UF_DATE',
[
'title' => Loc::getMessage('_ENTITY_UF_DATE_FIELD')
]
),
];
}
}
Только вот почему то в $elements ничего не попадает. Сами данные в Highload-блоках есть. Подскажите пожалуйста, как правильно составить запрос, чтобы всё работало. Скриншоты прикрепил.