Примерно так, если нужны поля инфоблока:
use Bitrix\Main\Application;
use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Loader;
Loader::includeModule('highloadblock');
Loader::includeModule('iblock');
$hlBlockId = 2;
$hlblock = HighloadBlockTable::getById($hlBlockId)->fetch();
/** @var \Bitrix\Main\Entity\Base $entity */
$entity = HighloadBlockTable::compileEntity($hlblock);
/** @var \Bitrix\Main\Entity\DataManager $dataClass */
$dataClass = $entity->getDataClass();
Application::getConnection()->startTracker();
$result = $dataClass::getList([
'select' => array(
'UF_ELEMENT_ID',
'NAME' => 'ELEMENT.NAME',
'CODE' => 'ELEMENT.CODE',
'DETAIL_PICTURE' => 'ELEMENT.DETAIL_PICTURE',
),
'runtime' => array(
'ELEMENT' => array(
'data_type' => '\Bitrix\Iblock\ElementTable',
'reference' => array(
'=this.UF_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'inner'
),
),
'limit' => 10,
]);
// Можно смотреть сформированный запрос
echo '<pre>', $result->getTrackerQuery()->getSql(), '</pre>';
while ($row = $result->fetch()) {
echo '<pre>';print_r($row);echo '</pre>';
}
Со свойства чуть сложнее.
P.S. некоторые примеры с использованием
ORM D7