Следующая часть в плейлисте про ORM.
ORM-07 / Связывание OneToOne
Учимся связывать сущности - джойнить (join) таблицы самым простым способом: OneToOne.
00:06 - Вводная. Пример для связывания сущностей (referenceField)
02:24 - Таблица с элементами (b_iblock_element), какой класс обслуживает эту таблицу. Просмотр таблиц в Битриксе и подсвечивания связанных полей
06:26 - Делаем выборку элементов через ORM, D7 Query
11:11 - Что такое картинка для анонса, в какой таблице хранятся изображения (b_file)
18:42 - Добавление в запрос RuntimeField. Способ №1
23:26 - Алиасы полей в выборке
26:44 - ExpressionField, mysql-функция CONCAT - собираем путь к картинке из "запчастей", полученных в запросе
29:02 - Добавление в запрос RuntimeField. Способ №2. Обучение сущности новому полю: метод addField
33:09 - Кеширование скомпилированного объекта сущности
37:54 - Получение объекта из результата и работа с ним напрямую.
#битрикс #orm #пиздецкакмывседолгождалипродолжения
ORM-07 / Связывание OneToOne
Учимся связывать сущности - джойнить (join) таблицы самым простым способом: OneToOne.
00:06 - Вводная. Пример для связывания сущностей (referenceField)
02:24 - Таблица с элементами (b_iblock_element), какой класс обслуживает эту таблицу. Просмотр таблиц в Битриксе и подсвечивания связанных полей
06:26 - Делаем выборку элементов через ORM, D7 Query
11:11 - Что такое картинка для анонса, в какой таблице хранятся изображения (b_file)
18:42 - Добавление в запрос RuntimeField. Способ №1
23:26 - Алиасы полей в выборке
26:44 - ExpressionField, mysql-функция CONCAT - собираем путь к картинке из "запчастей", полученных в запросе
29:02 - Добавление в запрос RuntimeField. Способ №2. Обучение сущности новому полю: метод addField
33:09 - Кеширование скомпилированного объекта сущности
37:54 - Получение объекта из результата и работа с ним напрямую.
#битрикс #orm #пиздецкакмывседолгождалипродолжения
YouTube
ORM-07 / Связывание OneToOne, ORM референсные поля (reference) #Битрикс
Учимся связывать сущности - джойнить (join) таблицы самым простым способом: OneToOne.
00:06 - Вводная. Пример для связывания сущностей (referenceField)
02:24 - Таблица с элементами (b_iblock_element), какой класс обслуживает эту таблицу. Просмотр таблиц…
00:06 - Вводная. Пример для связывания сущностей (referenceField)
02:24 - Таблица с элементами (b_iblock_element), какой класс обслуживает эту таблицу. Просмотр таблиц…
Иногда какой-то компонент вызывается в какой-то хитрой последовательности (например, вложен в шаблон новости), кешируется, но при изменении элемента инфоблока (новости) не сбрасывается, поскольку событие срабатывает только для тегов инфоблока, где произошли изменения.
...а сбрасывать целым ворохом весь соседний кеш из-за одного компонента как-то не очень хочется.
Сбрасываем кеш компонента из php-строки:
#битрикс #кеш #компоненты
...а сбрасывать целым ворохом весь соседний кеш из-за одного компонента как-то не очень хочется.
Сбрасываем кеш компонента из php-строки:
\CBitrixComponent::clearComponentCache('bitrix:form.result.new', 's1');
#битрикс #кеш #компоненты
Первый выпуск инстаграм-попурри.
Инстапурри-1
00:01 - Убейся об стену грёбаный инстаграм
00:17 - Нет связи в лесу
01:15 - Помыл машину
04:20 - На рынке
04:31 - Карантинно-масочное с воспоминаниями о Сицилии
05:10 - Масочное будущее
06:57 - Чат для разработчиков на Битриксе
07:58 - Чат для разработчиков на Битрикс24
08:51 - Неочевидные причины происходящего
09:54 - Сем и восем
11:13 - Долина возможностей
11:42 - А вы знаете какой сегоlня день ваще?
12:28 - Гребенщиков про Битриксоида из Колхоза
#инстапурри #непробитрикс
Инстапурри-1
00:01 - Убейся об стену грёбаный инстаграм
00:17 - Нет связи в лесу
01:15 - Помыл машину
04:20 - На рынке
04:31 - Карантинно-масочное с воспоминаниями о Сицилии
05:10 - Масочное будущее
06:57 - Чат для разработчиков на Битриксе
07:58 - Чат для разработчиков на Битрикс24
08:51 - Неочевидные причины происходящего
09:54 - Сем и восем
11:13 - Долина возможностей
11:42 - А вы знаете какой сегоlня день ваще?
12:28 - Гребенщиков про Битриксоида из Колхоза
#инстапурри #непробитрикс
YouTube
Инстапурри-1
Первый выпуск инстаграм-попурри.
00:00:00:01 - Убейся об стену грёбаный инстаграм
00:00:17:00 - Нет связи в лесу
00:01:15:00 - Помыл машину
00:04:20:00 - На рынке
00:04:31:00 - Карантинно-масочное с воспоминаниями о Сицилии
00:05:10:00 - Масочное будущее…
00:00:00:01 - Убейся об стену грёбаный инстаграм
00:00:17:00 - Нет связи в лесу
00:01:15:00 - Помыл машину
00:04:20:00 - На рынке
00:04:31:00 - Карантинно-масочное с воспоминаниями о Сицилии
00:05:10:00 - Масочное будущее…
Кто решит завязаться с ручной генерацией
«подписанных урлов» в ЯндексОблаке, а потом докопает до инструкции самого Амазона по этому вопросу
...тому я прям не завидую
#яндексоблакососёт #горбатыеинструкции #ноуменяполучилось #апричёмтутбитриксваще
«подписанных урлов» в ЯндексОблаке, а потом докопает до инструкции самого Амазона по этому вопросу
...тому я прям не завидую
#яндексоблакососёт #горбатыеинструкции #ноуменяполучилось #апричёмтутбитриксваще
Следующая часть в плейлисте про ORM.
ORM-07 / Связывание OneToMany
Учимся связывать сущности способом OneToMany.
00:06 - Вводная. Пример для связывания сущностей (referenceField)
03:00 - Свойство элемента типа справочник (привязка к хайлоадблокам) и значение поля UF_XML_ID
05:10 - Модуль хайлоадблоков и компиляция сущности. Таблица хранения записей хайлоадблоков
07:50 - Вручную собираем сущность хайлоадблока (Entity::compileEntity) по названию таблицы и нужным нам в выборке полям
09:30 - Компилируем сущность для выборки элементов инфоблока (по apiCode). Смотрим как хранится свойство элемента инфоблока и как выглядит для него скомпилированная сущность
13:51 - Связываем две сущности (join таблиц)
16:20 - Четвёртый параметр в конструкторе референсного (Reference) поля
19:00 - Две новости: одна плохая, друга хорошая
20:45 - Через поле сущности для элементов вытягиваем скомпилированную (refEntity) сущность для свойства элемента
28:09 - Связь OneToMany
32:19 - Создаём принимающий референс в сущности, которую привязываем к основной
33:23 - Создаём OneToMany у основной сущности
36:35 - Работа с коллекциями объектов
40:01 - Добиваем третью цепочку (джойним таблицу) к нашей сводной таблице
44:11 - Primary of table not found (когда в выборку для сджойненной таблицы не попал primary key)
47:01 - Пробуем то же с множественным свойством
#битрикс #orm #onetomany
ORM-07 / Связывание OneToMany
Учимся связывать сущности способом OneToMany.
00:06 - Вводная. Пример для связывания сущностей (referenceField)
03:00 - Свойство элемента типа справочник (привязка к хайлоадблокам) и значение поля UF_XML_ID
05:10 - Модуль хайлоадблоков и компиляция сущности. Таблица хранения записей хайлоадблоков
07:50 - Вручную собираем сущность хайлоадблока (Entity::compileEntity) по названию таблицы и нужным нам в выборке полям
09:30 - Компилируем сущность для выборки элементов инфоблока (по apiCode). Смотрим как хранится свойство элемента инфоблока и как выглядит для него скомпилированная сущность
13:51 - Связываем две сущности (join таблиц)
16:20 - Четвёртый параметр в конструкторе референсного (Reference) поля
19:00 - Две новости: одна плохая, друга хорошая
20:45 - Через поле сущности для элементов вытягиваем скомпилированную (refEntity) сущность для свойства элемента
28:09 - Связь OneToMany
32:19 - Создаём принимающий референс в сущности, которую привязываем к основной
33:23 - Создаём OneToMany у основной сущности
36:35 - Работа с коллекциями объектов
40:01 - Добиваем третью цепочку (джойним таблицу) к нашей сводной таблице
44:11 - Primary of table not found (когда в выборку для сджойненной таблицы не попал primary key)
47:01 - Пробуем то же с множественным свойством
#битрикс #orm #onetomany
YouTube
ORM-08 / Связывание OneToMany, ORM референсные поля (reference) #Битрикс
Учимся связывать сущности способом OneToMany.
00:06 - Вводная. Пример для связывания сущностей (referenceField)
03:00 - Свойство элемента типа справочник (привязка к хайлоадблокам) и значение поля UF_XML_ID
05:10 - Модуль хайлоадблоков и компиляция сущности.…
00:06 - Вводная. Пример для связывания сущностей (referenceField)
03:00 - Свойство элемента типа справочник (привязка к хайлоадблокам) и значение поля UF_XML_ID
05:10 - Модуль хайлоадблоков и компиляция сущности.…
Пример работы с условиями в ORM (а-то что-то примеров по
...ну и отдельно показываю как дотянуться через скомпилированную сущность элементов до символьных кодов (xml_id) значений свойств типа список и использовать их в фильтре.
...ну и негатив там (в позитивном смысле)
#битрикс #orm #filter #query #condition #фильтр #свойства #enum
ConditionTree
не густо)....ну и отдельно показываю как дотянуться через скомпилированную сущность элементов до символьных кодов (xml_id) значений свойств типа список и использовать их в фильтре.
...ну и негатив там (в позитивном смысле)
#битрикс #orm #filter #query #condition #фильтр #свойства #enum
В
...а значит в тех компонентах, которые унаследованы от
Помним, что и в выборке (языком GetList-а: в фильтре) должны присутствовать коды из сортировки (сортировка должна включать в себя выборку; не наоборот ...и выборка может быть значительно меньше чем последовательность в сортировке).
*) когда-то news.list переедет-таки на class.php и там тоже станет это возможным.
#битрикс #сортировка #id #getlist
CIBlockElement::GetList
-е можно сортировать по последовательности ID....а значит в тех компонентах, которые унаследованы от
\Bitrix\Iblock\Component\ElementList
можно пробрасывать массив ID-шек для сортировки*.Помним, что и в выборке (языком GetList-а: в фильтре) должны присутствовать коды из сортировки (сортировка должна включать в себя выборку; не наоборот ...и выборка может быть значительно меньше чем последовательность в сортировке).
*) когда-то news.list переедет-таки на class.php и там тоже станет это возможным.
#битрикс #сортировка #id #getlist
Множественные поля хайлоадблоков и ORM #Битрикс
Рассматриваем проблему множественных свойств, чьи значения хранятся в отдельной таблице (без праймари ключа), в выборке приходят либо со значением "Array" либо только первое из значений. Применяем болевой приём с типом поля Array.
00:06 - Вводная
01:17 - Множественные свойства в хайлоадблоке и выборка через ORM
04:00 - При fetchObject: "Array" в значениях основного поля в выборке и только первое значение из всех значений в результате
06:50 - uts- и utm-таблицы
10:35 - Строим референс между таблицей хайлоадблока и таблицей со значениями множественного свойства
15:53 - В выборку всё-равно попадает только одно из всех свойств
19:45 - Первый ответ на вопрос, почему так происходит: в таблице со значениями свойств нет primary-ключа, а только код элемента хайлоадблока (одинаковый у всех записей)
21:42 - Заходим с другой стороны: расковыриваем проблему с "Array" в результатах выборки
28:21 - Объяснение проблемы с "Array". Ковыряем с xdebug
30:44 - Принуждаем ORM к нужному нам типу с массивом, чтобы сериализованная строка прожила массивом и попала в выборку
33:57 - Реализация типа поля Array
35:12 - Разные варианты обработки строки: через сериализацию и через json.
#битрикс #orm #compileentity #join
Рассматриваем проблему множественных свойств, чьи значения хранятся в отдельной таблице (без праймари ключа), в выборке приходят либо со значением "Array" либо только первое из значений. Применяем болевой приём с типом поля Array.
00:06 - Вводная
01:17 - Множественные свойства в хайлоадблоке и выборка через ORM
04:00 - При fetchObject: "Array" в значениях основного поля в выборке и только первое значение из всех значений в результате
06:50 - uts- и utm-таблицы
10:35 - Строим референс между таблицей хайлоадблока и таблицей со значениями множественного свойства
15:53 - В выборку всё-равно попадает только одно из всех свойств
19:45 - Первый ответ на вопрос, почему так происходит: в таблице со значениями свойств нет primary-ключа, а только код элемента хайлоадблока (одинаковый у всех записей)
21:42 - Заходим с другой стороны: расковыриваем проблему с "Array" в результатах выборки
28:21 - Объяснение проблемы с "Array". Ковыряем с xdebug
30:44 - Принуждаем ORM к нужному нам типу с массивом, чтобы сериализованная строка прожила массивом и попала в выборку
33:57 - Реализация типа поля Array
35:12 - Разные варианты обработки строки: через сериализацию и через json.
#битрикс #orm #compileentity #join
YouTube
ORM-09 / Множественные поля хайлоадблоков и ORM #Битрикс
Рассматриваем проблему множественных свойств, чьи значения хранятся в отдельной таблице (без праймари ключа), в выборке приходят либо со значением "Array" либо только первое из значений. Применяем болевой приём с типом поля Array.
00:06 - Вводная
01:17 …
00:06 - Вводная
01:17 …
Второй выпуск инстаграм-попурри.
Инстапурри-2
https://youtu.be/ySyGbbxdjY8?t=1
00:01 - Супер настоящий 100% шоколад дома за 10 баксов за кило. Какао тёртое
01:55 - Сила маленьких шажочков. Бери только то, что можешь унести. Развивайся с той скоростью, которая тебе удобна или которую можешь себе позволить. Главное — не стоять на месте
07:07 - Новое Вакомовское перо, заказ через Амазон
11:43 - Как по пробке определить вкус вина
16:17 - Философствия о найме персонала на черешне
17:38 - Имеешь носки, - не можешь надеть
18:31 - Шум океана с неподвижным солнцем. Оркестр белого шума
20:30 - Маки. Самые красивые цветы
21:48 - Берлин, напоминание о Сицилии
#инстапурри #непробитрикс
Инстапурри-2
https://youtu.be/ySyGbbxdjY8?t=1
00:01 - Супер настоящий 100% шоколад дома за 10 баксов за кило. Какао тёртое
01:55 - Сила маленьких шажочков. Бери только то, что можешь унести. Развивайся с той скоростью, которая тебе удобна или которую можешь себе позволить. Главное — не стоять на месте
07:07 - Новое Вакомовское перо, заказ через Амазон
11:43 - Как по пробке определить вкус вина
16:17 - Философствия о найме персонала на черешне
17:38 - Имеешь носки, - не можешь надеть
18:31 - Шум океана с неподвижным солнцем. Оркестр белого шума
20:30 - Маки. Самые красивые цветы
21:48 - Берлин, напоминание о Сицилии
#инстапурри #непробитрикс
YouTube
Инстапурри-2
Второй выпуск инстаграм-попурри.00:01 - Супер настоящий 100% шоколад дома за 10 баксов за кило. Какао тёртое01:55 - Сила маленьких шажочков. Бери только то, ...
Ситуация: работаем через экшен компонента (или модуля) и решаем подключить другой компонент, обернуть ответ в буфер и потом его вернуть в результате.
При вызове компонента подключаются стили, скрипты (как файлом, так и
Пространство стилей и скриптов при выполнении экшена компонентов чистое от примесей ядра, потому смело используем накопленные буферы ассетсов.
...а на фронте обрабатываем его старой и в меру доброй
#битрикс #экшен #ассетсы #феншуемпочтинепахнетночтоподелать
При вызове компонента подключаются стили, скрипты (как файлом, так и
<script>
-вкрапления) и нам нужно их корректно пробросить на фронт.Пространство стилей и скриптов при выполнении экшена компонентов чистое от примесей ядра, потому смело используем накопленные буферы ассетсов.
...а на фронте обрабатываем его старой и в меру доброй
processRequestData
, которая умеет из html добыть нужные подключения и проинициализировать/подключить их.#битрикс #экшен #ассетсы #феншуемпочтинепахнетночтоподелать
ORM-10 / Основы встроенного кеширования в ORM.
https://youtu.be/udouzW91vMc
01:06 - Вводная. Про кеширование. Проблема избыточных ключей, попадающих в выборку
05:10 - Идентификатор ключа в кешировании Query-объекта формируется на основе sql-запроса
10:10 - Для кеширования ORM использует управляемый (Managed Cache) кеш. А значит, кеш финализируется (сливается в хранилище) на эпилоге и это нужно учитывать
16:30 - Кеширование с джойнами
18:10 - Чистка кеша
22:30 - Префикс "orm_" к пути (названию таблицы), в котором хранится кеш, для корректной чистки кеша
24:10 - Метод cleanCache у сущности
25:01 - Переименование директорий с суффиксом вида ".~xxxxxx"
#битрикс #orm #кеш #cache
https://youtu.be/udouzW91vMc
01:06 - Вводная. Про кеширование. Проблема избыточных ключей, попадающих в выборку
05:10 - Идентификатор ключа в кешировании Query-объекта формируется на основе sql-запроса
10:10 - Для кеширования ORM использует управляемый (Managed Cache) кеш. А значит, кеш финализируется (сливается в хранилище) на эпилоге и это нужно учитывать
16:30 - Кеширование с джойнами
18:10 - Чистка кеша
22:30 - Префикс "orm_" к пути (названию таблицы), в котором хранится кеш, для корректной чистки кеша
24:10 - Метод cleanCache у сущности
25:01 - Переименование директорий с суффиксом вида ".~xxxxxx"
#битрикс #orm #кеш #cache
YouTube
ORM-10 / Кеширование в Query ORM #Битрикс
Основы встроенного кеширования в ORM.01:06 - Вводная. Про кеширование. Проблема избыточных ключей, попадающих в выборку05:10 - Идентификатор ключа в кеширова...
Региональный композитный кеш
Теория
Не редкая ситуация, когда под одним и тем же доменом, на одних и тех же урлах запущена мультирегиональность, которая выражается в смене куки-параметра. Пробросить куки-идентификатор в параметры компонентов не проблема, но что делать с композитным кешем?
Композитный кеш при попытке отобразить результат идёт самым кратчайшим путём. Всё, что он производит — ряд небольших действий, суть которых сводится к составлению урла и Проверке существования релевантного составленному урлу кеш-файла. Ни одно событие не вызывается до этого момента-П и потому вклиниться мы не можем. Кратчайший путь обеспечивает настолько быстрый ответ из кеша, насколько это возможно.
Если мы заглянем в опшинсы, которые носит с собой композитный кеш, мы заметим ряд куки-ключей. Заглянув во внутренности мы обнаружим, что кроме урла есть ещё понятие приватного ключа. Он-то нам и поможет маркировать хит региональным идентификатором.
#композит #региональность
Теория
Не редкая ситуация, когда под одним и тем же доменом, на одних и тех же урлах запущена мультирегиональность, которая выражается в смене куки-параметра. Пробросить куки-идентификатор в параметры компонентов не проблема, но что делать с композитным кешем?
Композитный кеш при попытке отобразить результат идёт самым кратчайшим путём. Всё, что он производит — ряд небольших действий, суть которых сводится к составлению урла и Проверке существования релевантного составленному урлу кеш-файла. Ни одно событие не вызывается до этого момента-П и потому вклиниться мы не можем. Кратчайший путь обеспечивает настолько быстрый ответ из кеша, насколько это возможно.
Если мы заглянем в опшинсы, которые носит с собой композитный кеш, мы заметим ряд куки-ключей. Заглянув во внутренности мы обнаружим, что кроме урла есть ещё понятие приватного ключа. Он-то нам и поможет маркировать хит региональным идентификатором.
#композит #региональность
Региональный композитный кеш
Практика
Схема региональной маркировки композитных хитов:
1. Пишем хелпер, наследуясь от абстрактного класса
2. Подписываемся на событие
3. Там, где мы переключаем регион (смена куки, все дела), дёргаем наш персональный провайдер и продавливаем ему новый приватный ключ. Без этого шага (а смена региона как правило производится через аякс) иначе пнуть провайдер не получится: на аякс-вызовах композитный кеш пропускает ветку, по крайней мере на экшенах компонентов и
#композит #региональность
Практика
Схема региональной маркировки композитных хитов:
1. Пишем хелпер, наследуясь от абстрактного класса
\Bitrix\Main\Composite\Data\CacheProvider
, реализуем необходимые методы. Задача провайдера: обеспечить выдачу и хранение приватного ключа, который будет подмешан к урлу.2. Подписываемся на событие
'main', 'OnGetStaticCacheProvider'
, которое движок композитного кеша опрашивает для получения пользовательского провайдера. Метод должен вернуть объект провайдера.3. Там, где мы переключаем регион (смена куки, все дела), дёргаем наш персональный провайдер и продавливаем ему новый приватный ключ. Без этого шага (а смена региона как правило производится через аякс) иначе пнуть провайдер не получится: на аякс-вызовах композитный кеш пропускает ветку, по крайней мере на экшенах компонентов и
BX.ajax
финализация на эпилоге обрезанная.#композит #региональность
— Гля-я-я-я-янь!
— Альошенька, шо це?
— Мам! Це моє перше облачне пріложеніє!
— Гм. Кхм. Облачне? Пріложеніє? Для чого це воно?
— Воно створює отчьоти про недостачу на складі, яка формується по заказах, які ще не відвантажені.
— Ох-ох-ох. Отчьот! В зошиті виписав, ось тобі і отчьот. І це ти через це не спиш по ночах!? Відведи корову до череди, снідай та пішли буряки сапати. Облачний ти мій...
#aws #amazon #хмарки
— Альошенька, шо це?
— Мам! Це моє перше облачне пріложеніє!
— Гм. Кхм. Облачне? Пріложеніє? Для чого це воно?
— Воно створює отчьоти про недостачу на складі, яка формується по заказах, які ще не відвантажені.
— Ох-ох-ох. Отчьот! В зошиті виписав, ось тобі і отчьот. І це ти через це не спиш по ночах!? Відведи корову до череди, снідай та пішли буряки сапати. Облачний ти мій...
#aws #amazon #хмарки
Обновление в модуле ускорения по Google Pagespeed, сопроводительный видосик.
https://youtu.be/z8GTGPNkFdM
#битрикс #скорость #pagespeed
https://youtu.be/z8GTGPNkFdM
#битрикс #скорость #pagespeed
YouTube
Новый механизм ленивой подгрузки / Ускоритель по Google #Pagespeed / #битрикс
В обновлении выпущен новый подход к проблеме ленивой подгрузки изображений. Теперь заглушка точно попадает в пропорции целевого изображения, на рендеринг требуется меньше ресурсов.
Модуль на маркетплейсе: http://marketplace.1c-bitrix.ru/solutions/burlak…
Модуль на маркетплейсе: http://marketplace.1c-bitrix.ru/solutions/burlak…
Референсить (джойнить) можно двумя способами:
- (1) прямо в
- (2) обучать сущность полям а в
Мне очень нравится (и я везде об этом повторяю) второй способ.
Вот демо того, как мы, обучив сущность одному единственному полю, получаем возможность дотянуться до практически любого уровня вверх по разделам.
На скрине:
- скомпилировали сущность;
- добавили референсное поле на эту же сущность;
- chain-им по новому полю сколько-угодно раз.
Код из примера отбирает всех детей на пятом уровне вложенности по заданному корневому (первого уровня) разделу.
К тому же пример довольно выразителен, поскольку мы можем оперировать не просто ID родительских разделов, а любым полем, вплоть до пользовательских.
P.S.: казалось бы: мы могли тот же результат получить через грамотную выборку с лимитом по left_margin/right_margin, но нам пришлось бы указать значения границ корневого элемента, а это дополнительный запрос.
#битрикс #orm #тыгляньчотворит
- (1) прямо в
getList
через регистрацию рантайм джойнов;- (2) обучать сущность полям а в
getList
-е просто их использовать.Мне очень нравится (и я везде об этом повторяю) второй способ.
Вот демо того, как мы, обучив сущность одному единственному полю, получаем возможность дотянуться до практически любого уровня вверх по разделам.
На скрине:
- скомпилировали сущность;
- добавили референсное поле на эту же сущность;
- chain-им по новому полю сколько-угодно раз.
Код из примера отбирает всех детей на пятом уровне вложенности по заданному корневому (первого уровня) разделу.
К тому же пример довольно выразителен, поскольку мы можем оперировать не просто ID родительских разделов, а любым полем, вплоть до пользовательских.
P.S.: казалось бы: мы могли тот же результат получить через грамотную выборку с лимитом по left_margin/right_margin, но нам пришлось бы указать значения границ корневого элемента, а это дополнительный запрос.
#битрикс #orm #тыгляньчотворит