Всем привет.
При работе с ORM и объектом query возникает небольшая (точнее очень большая) неприятность: все поля становятся типа string, хотя в сущности описаны с правильными данными. Пример:
$select = [
'*',
'IMG_' => 'IMG',
'SECTION.ID',
];
$query = Sale\Internals\BasketTable::query()
->registerRuntimeField('SECTION', array(
'data_type' => \Bitrix\Iblock\SectionTable::class,
'reference' => [
'=this.PRODUCT.IBLOCK_SECTION_ID' => 'ref.ID'
]
))
->registerRuntimeField('IMG', [
'data_type' => \Bitrix\Main\FileTable::class,
'reference' => [
'=this.PRODUCT.PREVIEW_PICTURE' => 'ref.ID',
]
])
->setSelect($select)
->where('FUSER_ID', $this->fuser)
->where('ORDER_ID', null)
;
$rsBasketItems = $query->exec();
while($basketItem = $rsBasketItems->fetch()){
}
Если сделать dump basketItem, то все поля будут типа string
Если использовать fetchObject то внутри данные имеют правильную типизацию, но мне не нравится с ними работать, т.к. получаются очень тяжелые объекты. Ну и очень не удобно обращаться к каждому полю, как $basketItem->get('field') . + z использую собственные модели, в которых произвожу все преобразования, и их вывожу в шаблоне.
Как вариант, ещё можно использовать addFetchDataModifier и там преобразовывать нужные поля, но это тоже не очень удобно.
Кто сталкивался, как решали?