выводило не меньше двух (->setLimit(2))?
Такая ситуация может произойти, тк я добавил в element.php ->where('!ID', $elementId). В этом случае получу 3, а не 4
$query = \Bitrix\Iblock\ElementTable::query()
->registerRuntimeField(new \Bitrix\Main\ORM\Fields\Relations\Reference(
'ELEMENT_PROPERTY',
\Bitrix\Iblock\ElementPropertyTable::class,
\Bitrix\Main\ORM\Query\Join::on('this.ID', 'ref.IBLOCK_ELEMENT_ID')
))
->registerRuntimeField(new \Bitrix\Main\ORM\Fields\Relations\Reference(
'PROPERTY',
\Bitrix\Iblock\PropertyTable::class,
\Bitrix\Main\ORM\Query\Join::on('this.ELEMENT_PROPERTY.IBLOCK_PROPERTY_ID', 'ref.ID')
))
->where('IBLOCK_ID', $arParams['IBLOCK_ID'])
->where('!ID', $elementId) // добавил
->addSelect('ID')
->setLimit(2);
$iterator = (clone $query)->addOrder('ELEMENT_PROPERTY.VALUE', 'asc')
->union((clone $query)->addOrder('ELEMENT_PROPERTY.VALUE', 'desc'))
->exec();
если не найдет 4, то включать и текущий, так?
перечитал несколько раз но так и не понял - за этим какое примерно sql выражение стояло?
А почему 3 может получиться? Не выберет ни там ни там текущий id и вернёт и там и там по 2элемента. Ну а вообще эти цепочки построения запросов на то и нужны чтобы можно было удобно по условиям строить запрос
Обсуждают сегодня