Битриксоид из Колхоза
745 subscribers
298 photos
9 videos
5 files
98 links
Изучаем #Битрикс, находим ошибки, обслуживаем проекты, пишем модули, разрабатываем компоненты.

Ютуб: shorturl.at/himBM
Модуль-ускоритель: shorturl.at/lsyTW
Модуль комментариев: shorturl.at/ACDT2
Сайт разработчика: https://burlaka.studio
Download Telegram
Битриксоид из Колхоза
===== Фильтр vs Референс getList ы-синонимы #битрикс #getlist #filter #reference
Ещё один синоним предыдущих двух getList-ов, пересобранный через Query.
Учитывая мнение ребят из чата в ответ на вопрос о том, что по производительности лучше:
запрос слева или справа?
практически равносильны... Саша @altavir порекомендовал топить за читабельность кода.

Так что вот...

#битрикс #getList #query
Два кода равносильны в смысле результатов выборки.

Слева мы референс строим в объекте запроса, справа мы скомпилированную сущность нашего хайлоадблока дополняем референс-полем.

#битрикс #orm #query
0 -> NULL

Если вдруг по какой-то причине нам нужно перебрать все записи, у которых пользовательское поле равняется 0 вместо NULL и изменить значения (и мы хотим это сделать именно через ORM), при работе через EO-объект воспользоваться методом ->set не получится, поскольку под капотом идёт сравнение через приведение типов. Новое значение не воспринимается как новое и перезапись не происходит.

Делаем обход через sys*-методы.

Внутри ->sysSetValue проверка нового и текущего значения идёт тоже через приведение типов, потому мы непосредственно перед вызовом сбрасываем актуальное значение в «ненольиненулл».

#битрикс #orm #query #null
Проблема: при компиляции сущности для элементов инфоблока, поля свойств содержат сущность, скомпилированную без колонки DESCRIPTION.

Прямо на лету (это-жеж-orm!) добиваем поле:
• получаем нужное поле из основной сущности;
• получаем референс-сущность;
• обучаем её колонке, которая упущена.

#битрикс #orm #fields #query
В примере выше можно заметить обёртку-хелпер для создания полей-выражений типа COUNT, MAX, MIN, SUM... для использования в запросе в select-е.

Чуть пристальнее (скриншот)

#выражения #expression #select #query
Пример работы с условиями в ORM (а-то что-то примеров по ConditionTree не густо).

...ну и отдельно показываю как дотянуться через скомпилированную сущность элементов до символьных кодов (xml_id) значений свойств типа список и использовать их в фильтре.

...ну и негатив там (в позитивном смысле)

#битрикс #orm #filter #query #condition #фильтр #свойства #enum
Разноплановый пример работы с ORM.

Задача: получать путь к файлу-картинке раздела (поле PICTURE) сразу в выборке, чтобы потом не перебирать в коде и не получать дополнительно через CFile::GetPath().

Обведённое жёлтым — код-кандидат на то, чтобы его вынести в хелпер. Методу хелпера передаём сущность и код поля для построения референса (чтобы можно было обучать сущности не только разделов, но и элементов). Метод обучает сущность нужным полям и мы потом просто делаем выборку.

Код на pastebin.

#битрикс #orm #query #разделы #файлы
Конструктор выражения собирает правило через sprintf и значит мы можем использовать возможности этой функции
#битрикс #expression #query #условия #выражения
Когда мы компилируем сущность по API-коду инфоблока, нам в выборке кроме основных полей могут понадобиться свойства. Если пишем хелпер — так вообще все свойства (которых может быть много, плюс они могут расширяться).

Если объекту Query в качестве полей для select-а указать ['*'], будут отобраны все основные поля, а свойства — нет. То есть свойства нужно прописывать явно.

Однако же сущность знает про свойства элементов. Воспользуемся этим знанием, чтобы избавить себя от ручного указания свойств.

#битрикс #orm #query
🦉

DETAIL_PAGE_URL, SECTION_PAGE_URL
>>> Урлы разделов и элементов через ORM <<<

Вынес в статью, потому что слишком многобукаф для телеги 😱
Код моментами выглядит криповато, но результат мне нравится 🧜‍♂️😍

#битрикс #orm #query
Небольшой примерчик.
Получение кодов разделов по кодам товаров.

Использование дистинкт в квери.

use Bitrix\Iblock\ElementTable;
use Bitrix\Main\ORM\Query\Query;

$query = new Query(ElementTable::getEntity());
$res = $query
->whereIn('ID', $productsIdList)
->setSelect(['IBLOCK_SECTION_ID'])
->setDistinct()
->exec();

#distinct #query #orm
Битриксоид из Колхоза
Похоже будет новая рубрика. Делаю разные пробы, чтобы понять, как может быть полезным чатГПТ. Запросил свг-код для крестика, чтобы в стили вверстать. Отлично сделал. К сожалению, в случае со стрелочкой влево (в том же простом стиле, как крестик) получилось…
Пишем запрос на D7

В коде гпт неточность: полей DATE_ACTIVE_FROM и DATE_ACTIVE_TO в текущей сущности таблета с элементами нет — это поля из старого ядра и используются в CIBlockElement::GetListhttps://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php.

В сущности через Query должны быть ACTIVE_FROM и ACTIVE_TO.

В остальном всё хорошо (единственное, что я бы не делал fetchAll, а перебирал в цикле через fetch).

#нейронки #chatgpt #d7 #query