Пытаюсь собрать "правильный" getList.
Есть 2 сущности связанные через OneToMany и Reference с другой стороны (связь множественная).
Делаю выборки getList()->fetch()/->fetchAll()/->fetchCollection();
Все хорошо пока в запрос не добавляется limit.
Если у сущности 2 связанных элемента то на нее будет "потрачено" 2 "лимита". И не важно каким образом будет обработан результат.
Грубо говоря если у первого элемента будет 2 дочерних то в выборку попадут 4 строки вместо 5ти (2 строки ушли на первых элемент).
Я смог собрать запрос при помощи ExpressionField и fetch_data_modification. Суть тут заключается в том что я динамически собираю id дочерних элементов в строку, а затем в fetch_data_modification доп запросом получаю эти объекты.
С таким костылем limit работает корректно но: 1) это плохо пахнет, 2) функцию модификации придется писать ко всем связанным сущностям.
Как это делать правильно? Оно вообще умеет правильно работать с limit и OneToMany одновременно?
Пример getList
$arSelect = [
'*',
'SPECIALIZATION'
];
$arOrder = ['ID'=>'ASC'];
$limit = 2;
$obResult = \K\Core\User\VerificationTable::getList([
'select'=> $arSelect,
'order' => $arOrder,
'limit' => $limit
])->fetchCollection();
echo count($obResult);
Результатом будет 1, а не 2.
Маппинг базовой сущности VerificationTable
public static function getMap():array{
return [
(new Entity\IntegerField('ID'))
->configurePrimary()
->configureAutocomplete(),
(new OneToMany(
'SPECIALIZATION',
'\K\Core\User\Verification\SpecializationTable',
'VERIFICATION'
)),
];
}
Маппинг подчиненной сущности SpecializationTable
public static function getMap():array{
return [
(new Entity\IntegerField('ID'))
->configurePrimary()
->configureAutocomplete(),
(new Entity\IntegerField('VERIFICATION_ID'))
->configureRequired(),
(new Entity\ReferenceField('VERIFICATION',
'\K\Core\User\VerificationTable',
['=this.VERIFICATION_ID'=>'ref.ID']
))->configureTitle(self::getMessage('K_CORE_FIELD_VERIFICATION_TITLE')),
];
}