Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 21 additions & 10 deletions pages/orm/query-builder.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`

Expand All @@ -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();
Expand All @@ -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');

Expand All @@ -51,7 +54,7 @@ function attachSelect(Entity\Query $query): void
}
}

function attachOthers(Entity\Query $query): void
function attachOthers(Query $query): void
{
// Условие для добавления фильтра
if (/* условие */)
Expand All @@ -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` добавляет поля, которые нужно выбрать из базы данных.

Expand All @@ -86,15 +89,17 @@ 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();
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**

Expand All @@ -104,6 +109,12 @@ file_put_contents('/tmp/today_books.sql', $sql);

- `getSelect`, `getGroup` — возвращает массив полей

**distinct**

- `setDistinct` — устанавливает флаг DISTINCT для устранения дубликатов строк

- `hasDistinct` — проверяет, установлен ли флаг DISTINCT (включая автоматическое определение в `Bitrix\Main\ORM\Fields\ExpressionField`, если таковые участвуют в запросе)

**filter**

- `setFilter` — устанавливает фильтр
Expand Down