доброго времени суток всем
хочу понять идеологию 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"]
),
)); |
спасибо.