Нужно получить такой SELECT в запросе:
[CODE]SELECT
s.ID AS section_id,
s.NAME AS section_name,
SUBSTRING_INDEX(GROUP_CONCAT(i.ID ORDER BY price.PRICE), ',', 1) AS item_id,
SUBSTRING_INDEX(GROUP_CONCAT(i.NAME ORDER BY price.PRICE), ',', 1) AS item_name,
MIN(price.PRICE) AS min_price
[/CODE]
Пытаюсь сделать это следующим кодом:
[CODE]use Bitrix\Main\Entity\ExpressionField;
use Bitrix\Main\DB\SqlExpression;
use Bitrix\Iblock\{SectionTable, ElementTable, ElementPropertyTable};
use Bitrix\Catalog\{ProductTable, PriceTable};
$query = PriceTable::query()
//Товары
->registerRuntimeField('product', [
'data_type' => ProductTable::class,
'reference' => ['=ref.ID' => 'this.PRODUCT_ID'],
'join_type' => 'INNER',
])
//Привязанные к товарам элементы инфоблока
->registerRuntimeField('i', [
'data_type' => ElementTable::class,
'reference' => ['=ref.ID' => 'this.product.ID'],
'join_type' => 'INNER',
])
//Секции, соответствующие элементам
$query->registerRuntimeField('s', [
'data_type' => SectionTable::class,
'reference' => ['=ref.ID' => 'this.i.IBLOCK_SECTION_ID'],
'join_type' => 'INNER',
])
//Минимальные цены товаров, сгруппированные по секциям
->registerRuntimeField('min_price', [
'data_type' => 'integer',
'expression' => ['MIN(%s)', 'PRICE']
])
//ID и название товара - для отладки
->registerRuntimeField('item_id', [
'data_type' => 'integer',
'expression' => ['SUBSTRING_INDEX(GROUP_CONCAT(%s ORDER BY %s), ',', 1)', 'i.ID', 'price.PRICE']
])
->registerRuntimeField('item_name', [
'data_type' => 'string',
'expression' => ['SUBSTRING_INDEX(GROUP_CONCAT(%s ORDER BY %s), ',', 1)', 'i.NAME', 'price.PRICE']
])
->setSelect([
'section_id' => 's.ID',
'section_name' => 's.NAME',
'item_id',
'item_name'
'min_price',
])
->setFilter(['=i.IBLOCK_ID' => $iblockId, '=i.ACTIVE' => 'Y', '=product.AVAILABLE' => 'Y'])
->setGroup(['s.ID'])
;
[/CODE]
На что Битрикс утверждает, что
[QUOTE]PHP Fatal error: Uncaught Bitrix\Main\SystemException: Unknown field definition `, 1)` (, 1)) for \Bitrix\Catalog\Price Entity.
[/QUOTE]
Указывая на строку
[QUOTE]Bitrix\Main\ORM\Query\Query->registerRuntimeField('item_id', Array)
[/QUOTE]
То есть, не может понять про подстановку нескольких значений в expression.
Если указать[FONT=Courier New] 'i.ID', 'price.PRICE'[/FONT] как массив - результат тот же.
В итоге, можно ли как-то подставить в expression несколько значений?