[QUOTE]
Роман Семёнов написал:
жжете[QUOTE] Ярослав написал:
Для свойства в отдельной таблице(в принципе метод compileEntity подходит для любой таблицы в базе):
[CODE] <?php
use \ Bitrix \ Iblock \ ElementTable ;
use \ Bitrix \ Main \ Application ;
use \ Bitrix \ Main \ Loader ;
use \ Bitrix \ Main \ Entity \ Base ;
Loader::includeModule( 'iblock' );
$iblockId = 1 ;
$entityPropsSingle = Base::compileEntity(
'PROPS_SINGLE_IB1' ,
[
'IBLOCK_ELEMENT_ID' => [ 'data_type' => 'integer' ],
'PROPERTY_1020' => [ 'data_type' => 'integer' ],
],
[
'table_name' => 'b_iblock_element_prop_s1' ,
]
);
Application::getConnection()->startTracker();
$result = ElementTable::getList([
'select' => [
'ID' ,
'NAME' ,
'PROPS_SINGLE.*' ,
],
'filter' => [
'>PROPS_SINGLE.PROPERTY_1020' => 0 ,
],
'order' => [
'PROPS_SINGLE.PROPERTY_1020' => 'ASC' ,
],
'runtime' => [
'PROPS_SINGLE' => [
'data_type' => $entityPropsSingle ->getDataClass(),
'reference' => [
'=this.ID' => 'ref.IBLOCK_ELEMENT_ID'
],
'join_type' => 'inner'
],
],
]);
// Можно смотреть сформированный запрос
echo '<pre>' , $result ->getTrackerQuery()->getSql(), '</pre>' ;
echo '<pre>' ;
print_r( $result ->fetchAll());
echo '</pre>' ;
[/CODE][/QUOTE]
в реальной практике используется не 1 свойство а как минимум 10-20 - и что в итоге получится?
старое api по прежнему проще и понятнее[/QUOTE]
Base::compileEntity не обязательно указывать все столбцы таблицы, а которые необходимо. Этот хардкод только для примера, тут можно и нужно многое улучшить, например, можно сначала формировать массив с необходимыми столбцами, а потом передавать его в Base::compileEntity. И вообще, народ просил как это сделать на d7, я ответил, а так, да, Вы правы - старое api по прежнему проще и понятнее.
Кстати, чтобы не привязываться к id свойства(что есть плохо) есть способ по коду свойства, его описали в блогах, если интересно.