доброго времени суток всем
хочу понять идеологию ORM Битрикса, и возник ряд вопросов
пытаюсь переопределить маппинг одного из классов, к примеру
class L1Table extends \Bitrix\Iblock\SectionTable
для выдергивания значений связи 1:N (один ко многим)
ниже пример типа у секции есть родители-секции
дабы вытянуть вместе с нужной секцией все его вышестоящие родительские секции ....
далее
и всё бы хорошо но результат не радует ....
вместо ожидаемого результата что то типа:
count($_->fetchAll()) == 1 c cсодержимым:
получаю count($_->fetchAll()) == 3 c cсодержимым информации о запрашиваемом элементе разбавленной информацией о каждом родительском элементе:
Вопрос №1. что делаю не так ...? возможно ли коллапсирование?
Вопрос №2. если в L1Table::getList не обмолвится о необходимой сущности PARENT_SECTIONS1 возможно к ней обратится позже ... эдакий lazy load ...
к примеру
и потом уже что то типа $_->PARENT_SECTIONS1 ... который вернул бы мне массив родителей секции ?
спасибо.
хочу понять идеологию ORM Битрикса, и возник ряд вопросов
пытаюсь переопределить маппинг одного из классов, к примеру
class L1Table extends \Bitrix\Iblock\SectionTable
для выдергивания значений связи 1:N (один ко многим)
ниже пример типа у секции есть родители-секции
Код |
---|
class L1Table extends \Bitrix\Iblock\SectionTable { public static function getFilePath() { return __FILE__; } public static function getMap() { return parent::getMap() + array( 'PARENT_SECTIONS1' => array( 'data_type' => '\Bitrix\Iblock\Section', 'reference' => array( '=this.IBLOCK_ID' => 'ref.IBLOCK_ID', '>=this.LEFT_MARGIN' => 'ref.LEFT_MARGIN', '<=this.RIGHT_MARGIN' => 'ref.RIGHT_MARGIN', ), ), new Entity\ReferenceField( 'PARENT_SECTIONS2', '\Bitrix\Iblock\Section', array( '=this.IBLOCK_ID' => 'ref.IBLOCK_ID', '>=this.LEFT_MARGIN' => 'ref.LEFT_MARGIN', '<=this.RIGHT_MARGIN' => 'ref.RIGHT_MARGIN', ) ) ); } } |
дабы вытянуть вместе с нужной секцией все его вышестоящие родительские секции ....
далее
Код |
---|
$_ = L1Table::getList(array( 'select'=> array('*','PARENT_SECTIONS1'), 'filter'=>array( 'IBLOCK_ID'=>IBLOCK_ID_CATALOG, 'CODE' => $arResult["VARIABLES"]["SECTION_CODE"] ), )); |
вместо ожидаемого результата что то типа:
count($_->fetchAll()) == 1 c cсодержимым:
Код |
---|
array(**) { ["ID"]=> string(4) "4581" .... ["IBLOCK_ID"]=> string(3) "151" ["DEPTH_LEVEL"]=> string(1) "1" ["NAME"]=> string(*) "section 10" !!! ["L1_PARENT_SECTIONS1"]=> array(**) { 0 => object(L1Table) (1) { ... data parent section 5 ... where DEPTH_LEVEL=2 } 0 => object(L1Table) (1) { ... data parent section 1 ... where DEPTH_LEVEL=1 } } !!! .... |
Код |
---|
array(*) { array(**) { ["ID"]=> string(4) "4581" .... ["IBLOCK_ID"]=> string(3) "151" ["DEPTH_LEVEL"]=> string(1) "1" ["NAME"]=> string(*) "section 10" !!! ["L1_PARENT_SECTIONS_CREATED_BY"]=> string(3) "139" ["L1_PARENT_SECTIONS_IBLOCK_ID"]=> string(3) "151" ["L1_PARENT_SECTIONS_NAME"]=> string(30) "section 5" ["L1_DEPTH_LEVEL"]=>5 !!! ... } array(**) { ["ID"]=> string(4) "4581" .... ["IBLOCK_ID"]=> string(3) "151" ["DEPTH_LEVEL"]=> string(1) "1" ["NAME"]=> string(*) "section 10" !!! ["L1_PARENT_SECTIONS_CREATED_BY"]=> string(3) "139" ["L1_PARENT_SECTIONS_IBLOCK_ID"]=> string(3) "151" ["L1_PARENT_SECTIONS_NAME"]=> string(30) "section 1" ["L1_DEPTH_LEVEL"]=>1 !!! ... и так по всем остальным ... |
Вопрос №1. что делаю не так ...? возможно ли коллапсирование?
Вопрос №2. если в L1Table::getList не обмолвится о необходимой сущности PARENT_SECTIONS1 возможно к ней обратится позже ... эдакий lazy load ...
к примеру
Код |
---|
$_ = L1Table::getList(array( 'select'=> array('*'), 'filter'=>array( 'IBLOCK_ID'=>IBLOCK_ID_CATALOG, 'CODE' => $arResult["VARIABLES"]["SECTION_CODE"] ), )); |
спасибо.