From f8e91766cd04c15b64a81d5f01978bf991f0f8c7 Mon Sep 17 00:00:00 2001 From: Alexander Vorobyev Date: Fri, 28 Aug 2026 10:09:28 +0300 Subject: [PATCH 1/3] =?UTF-8?q?add:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BE=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20DISTINCT=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/orm/query-builder.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pages/orm/query-builder.md b/pages/orm/query-builder.md index b68ea97..7fafb05 100644 --- a/pages/orm/query-builder.md +++ b/pages/orm/query-builder.md @@ -104,6 +104,10 @@ file_put_contents('/tmp/today_books.sql', $sql); - `getSelect`, `getGroup` — возвращает массив полей +**distinct** +- `setDistinct` — устанавливает флаг DISTINCT для устранения дубликатов строк +- `hasDistinct` — проверяет, установлен ли флаг DISTINCT (включая автоматическое определение через цепочки полей) + **filter** - `setFilter` — устанавливает фильтр From 0d29eef15f96ad14e0004fe09675f3809d1bb351 Mon Sep 17 00:00:00 2001 From: Alexander Vorobyev Date: Fri, 28 Aug 2026 10:17:59 +0300 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=D0=9F=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D0=B2=D1=8F=D0=B7=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5?= =?UTF-8?q?=20=D1=81=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BF=D1=80=D0=BE=D1=81=D1=82=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B0=20=D0=B8=D0=BC=D0=B5=D0=BD=20Query?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Изменено пространство имен класса с устаревшего - Приведено полный путь пространства имен - В примерах добавлен use --- pages/orm/query-builder.md | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/pages/orm/query-builder.md b/pages/orm/query-builder.md index 7fafb05..88c80bb 100644 --- a/pages/orm/query-builder.md +++ b/pages/orm/query-builder.md @@ -5,7 +5,7 @@ description: 'Построитель запросов. ORM Bitrix Framework: к Методы выборки `getList` и `getRow` сразу выполняют запросы и возвращают результаты. Они подходят для простых запросов, но неудобны, если параметры неизвестны заранее или нужна сложная логика. -**Гибкость с Entity\\Query.** Для гибкой настройки запросов используйте объект `Entity\Query`(далее — `Query`). Он накапливает параметры для запроса. Это полезно, когда параметры неизвестны заранее и формируются программно. +**Гибкость с Bitrix\\Main\\ORM\\Query\\Query.** Для гибкой настройки запросов используйте объект `Bitrix\Main\ORM\Query\Query`(далее — `Query`). Он накапливает параметры для запроса. Это полезно, когда параметры неизвестны заранее и формируются программно. Пример с `getList` @@ -17,11 +17,12 @@ $result = BookTable::getList([ ]); ``` -Пример с `Entity\Query` +Пример с `Bitrix\Main\ORM\Query\Query` ```php -// аналогичный запрос через Entity\Query -$q = new Entity\Query(BookTable::getEntity()); +use Bitrix\Main\ORM\Query\Query; +// аналогичный запрос через Query +$q = new Query(BookTable::getEntity()); $q->setSelect(['ISBN', 'TITLE', 'PUBLISH_DATE']); $q->setFilter(['=ID' => 1]); $result = $q->exec(); @@ -34,13 +35,15 @@ $result = $q->exec(); Если вы не знаете заранее, какие поля выбрать или какие фильтры применить, используйте объект `Query` для постепенного добавления параметров. ```php -$query = new Entity\Query(BookTable::getEntity()); +use Bitrix\Main\ORM\Query\Query; + +$query = new Query(BookTable::getEntity()); attachSelect($query); attachOthers($query); $result = $query->exec(); // Функция для добавления полей в запрос -function attachSelect(Entity\Query $query): void +function attachSelect(Query $query): void { $query->addSelect('ID'); @@ -51,7 +54,7 @@ function attachSelect(Entity\Query $query): void } } -function attachOthers(Entity\Query $query): void +function attachOthers(Query $query): void { // Условие для добавления фильтра if (/* условие */) @@ -67,7 +70,7 @@ function attachOthers(Entity\Query $query): void } ``` -**Создание объекта Query**. Используем `new Entity\Query(BookTable::getEntity())` для создания нового объекта `Query`, связанного с сущностью `BookTable`. Это будет основой для построения запроса. +**Создание объекта Query**. Используем `new Query(BookTable::getEntity())` для создания нового объекта `Query`, связанного с сущностью `BookTable`. Это будет основой для построения запроса. **Добавление полей в запрос**. Функция `attachSelect` добавляет поля, которые нужно выбрать из базы данных. @@ -86,7 +89,9 @@ function attachOthers(Entity\Query $query): void Объект `Query` позволяет строить запрос без его выполнения. Это полезно для подзапросов или получения текста запроса: ```php -$q = new Entity\Query(BookTable::getEntity()); +use Bitrix\Main\ORM\Query\Query; + +$q = new Query(BookTable::getEntity()); $q->setSelect(['ID']); $q->setFilter(['=PUBLISH_DATE' => new Type\Date('2014-12-13', 'Y-m-d')]); $sql = $q->getQuery(); @@ -94,7 +99,7 @@ file_put_contents('/tmp/today_books.sql', $sql); // Запрос "SELECT ID FROM my_book WHERE PUBLISH_DATE='2014-12-31'" будет сохранен в файл, но не выполнен. ``` -## Методы Entity\\Query +## Методы Bitrix\\Main\\ORM\\Query\\Query **select, group** From 14eeaf15f077839da32cdb7eed3b4e8faf67a3da Mon Sep 17 00:00:00 2001 From: Alexander Vorobyev Date: Fri, 28 Aug 2026 10:26:18 +0300 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=D0=A3=D1=82=D0=BE=D1=87=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20has?= =?UTF-8?q?Distinct?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/orm/query-builder.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pages/orm/query-builder.md b/pages/orm/query-builder.md index 88c80bb..ffd7cba 100644 --- a/pages/orm/query-builder.md +++ b/pages/orm/query-builder.md @@ -110,8 +110,10 @@ file_put_contents('/tmp/today_books.sql', $sql); - `getSelect`, `getGroup` — возвращает массив полей **distinct** + - `setDistinct` — устанавливает флаг DISTINCT для устранения дубликатов строк -- `hasDistinct` — проверяет, установлен ли флаг DISTINCT (включая автоматическое определение через цепочки полей) + +- `hasDistinct` — проверяет, установлен ли флаг DISTINCT (включая автоматическое определение в `Bitrix\Main\ORM\Fields\ExpressionField`, если таковые участвуют в запросе) **filter**