PHPackages                             digitalstars/simple-sql - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. digitalstars/simple-sql

ActiveLibrary[Database &amp; ORM](/categories/database)

digitalstars/simple-sql
=======================

Библиотека для генерации SQL запросов

v1.0.3(2y ago)012MITPHPPHP &gt;=8.0

Since Mar 21Pushed 2y ago1 watchersCompare

[ Source](https://github.com/digitalstars/SimpleSQL)[ Packagist](https://packagist.org/packages/digitalstars/simple-sql)[ RSS](/packages/digitalstars-simple-sql/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (4)DependenciesVersions (5)Used By (0)

SimpleSQL
=========

[](#simplesql)

Подключение
-----------

[](#подключение)

`composer require digitalstars/simple-sql`

В общих словах
--------------

[](#в-общих-словах)

Библиотека представляет собой удобный интерфейс для конструирования SQL запросов.

Быстрый старт
-------------

[](#быстрый-старт)

Ниже приведён пример подключения библиотеки и настройки, необходимой для начала работы. Все примеры будут приведены без этих строк инициализации.

```
require_once __DIR__ . "/lib/autoload.php";

use DigitalStars\SimpleSQL\Parser;

$pdo = new \PDO(DB_DSN, DB_LOGIN, DB_PASS);

Parser::setPDO($pdo);
```

Оглавление
----------

[](#оглавление)

- [Основные компоненты](#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B)
    - [Parser](#Parser) - Класс для постобработки запроса, заполняет типизированные заполнители значениями.
        - [setPDO](#static-function-setpdopdo-pdo) - Устанавливает объект PDO, который будет использоваться для подготовки параметров запроса.
    - [From](#From) - Компонент, представляющий таблицу в запросе, к которой идёт обращение.
        - `create` - Статический метод, инициализация объекта From.
        - `getFrom` - Возвращает имя таблицы или объект Select.
        - `setFrom` - Устанавливает имя таблицы или объект Select.
        - `getAlias` - Возвращает алиас таблицы.
        - `setAlias` - Устанавливает алиас таблицы.
        - `getSql` - Возвращает сгенерированную строку запроса.
        - `getSqlRaw` - Возвращает сгенерированную строку запроса и значения для заполнителей.
    - [Join](#Join) - Компонент, представляющий JOIN-а в запросе.
        - `create` - Статический метод, инициализация объекта Join.
        - `getLateral` - Возвращает true, если JOIN является LATERAL.
        - `setLateral` - Устанавливает JOIN как LATERAL.
        - `setType` - Устанавливает тип JOIN-а.
        - `getType` - Возвращает тип JOIN-а.
        - `setFrom` - Устанавливает таблицу для запроса.
        - `getFrom` - Возвращает объект From, который был установлен в запросе.
        - `setWhere` - Устанавливает условие соединения JOIN-а.
        - `getWhere` - Возвращает объект Where (условие JOIN-а).
        - `getSql` - Возвращает сгенерированную строку запроса.
        - `getSqlRaw` - Возвращает сгенерированную строку запроса и значения для заполнителей.
    - [Where](#Where) - Компонент, представляющий конструктор условия, может быть использован как для WHERE, так и для ON.
        - `create` - Статический метод, инициализация объекта Where.
        - `isEmpty` - Возвращает true, если объект Where пустой.
        - `w_and` - Добавляет к текущему объекту Where условие через AND.
        - `w_or` - Добавляет к текущему объекту Where условие через OR.
        - `clear` - Очищает текущий объект Where от условий.
        - `getSqlRaw` - Возвращает сгенерированную строку запроса и значения для заполнителей.
- [Select запросы](#SELECT-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B) - Конструктор запросов SELECT.
    - `create` - Статический метод, инициализация объекта Select.
    - `setSelect` - Устанавливает список полей для выборки.
    - `addSelectList` - Добавляет поля к уже существующим.
    - `addSelect` - Добавляет поле в список выборки.
    - `getSelect` - Возвращает список полей для выборки.
    - `setFrom` - Устанавливает таблицу для запроса.
    - `getFrom` - Задаёт таблицу для запроса.
    - `getJoinList` - Возвращает список объектов Join.
    - `addJoin`, в список JOIN-ов.
    - `setJoin`, в список JOIN-ов.
    - `getWhere` - Возвращает условие WHERE.
    - `setWhere` - Устанавливает условие WHERE.
    - `getGroupBy` - Возвращает список полей для группировки.
    - `setGroupBy` - Устанавливает список полей для группировки.
    - `getHawing` - Возвращает условие HAVING.
    - `setHawing` - Устанавливает условие HAVING.
    - `getOrderBy` - Возвращает список полей для сортировки.
    - `setOrderBy` - Устанавливает список полей для сортировки.
    - `addOrderBy` - Добавляет полей для сортировки в конец уже заданных.
    - `getLimit` - Возвращает количество строк, которые будут выбраны.
    - `setLimit` - Устанавливает количество строк, которые будут выбраны.
    - `getShareMode` - Возвращает режим блокировки.
    - `setShareModeUpdate` - Устанавливает режим FOR UPDATE.
    - `setShareModeShare` - Устанавливает режим FOR SHARE.
    - `setShareModeDefault` - Устанавливает режим блокировки по умолчанию.
    - `getSelectArray` - Собирает и возвращает массив, который содержит в себе все поля выборки.
    - `getSelectFeels` - Возвращает массив алиасов полей выборки.
    - `getSql` - Возвращает сгенерированную строку запроса.
    - `getSqlRaw` - Возвращает сгенерированную строку запроса и значения для заполнителей.
- [INSERT запросы](#INSERT-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B) - Конструктор запросов INSERT.
    - `create` - Статический метод, инициализация объекта Insert.
    - `setFields` - Устанавливает список полей для вставки.
    - `addField` - Добавляет поле в список полей для вставки.
    - `getFields` - Возвращает список полей для вставки.
    - `setValues` - Устанавливает список значений для вставки.
    - `addValues` - Добавляет значения для вставки.
    - `getValues` - Возвращает список значений для вставки.
    - `setFrom` - Устанавливает таблицу, в которую будет производиться вставка.
    - `getFrom` - Возвращает таблицу, в которую будет производиться вставка.
    - `setIgnoreDuplicate` - Устанавливает флаг IGNORE в INSERT.
    - `getIgnoreDuplicate` - Возвращает true, если установлен флаг IGNORE.
    - `setFieldsUpdateOnDuplicate` - Устанавливает список полей, которые будут обновлены в случае, если запись уже существует.
    - `addFieldsUpdateOnDuplicate` - Добавляет поле в список полей, которые будут обновлены в случае, если запись уже существует.
    - `getFieldsUpdateOnDuplicate` - Возвращает список полей, которые будут обновлены в случае, если запись уже существует.
    - `getSql` - Возвращает сгенерированную строку запроса.
    - `getSqlRaw` - Возвращает сгенерированную строку запроса и значения для заполнителей.
- [UPDATE запросы](#UPDATE-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B) - Конструктор запросов UPDATE.
    - `create` - Статический метод, инициализация объекта Update.
    - `setSet` - Устанавливает список полей для обновления.
    - `addSet` - Добавляет поле в список полей для обновления.
    - `getSet` - Возвращает список полей для обновления.
    - `getSetSQLRaw` и значения для заполнителей.
    - `getFrom` - Возвращает таблицу, в которой будет производиться обновление.
    - `setFrom` - Устанавливает таблицу, в которой будет производиться обновление.
    - `getJoinList` - Возвращает список объектов Join.
    - `setJoin`, в список JOIN-ов.
    - `addJoin`, в список JOIN-ов.
    - `getWhere` - Возвращает условие WHERE.
    - `setWhere` - Устанавливает условие WHERE.
    - `getLimit` - Возвращает количество строк, которые будут обновлены.
    - `setLimit` - Устанавливает количество строк, которые будут обновлены.
    - `getSql` - Возвращает сгенерированную строку запроса.
    - `getSqlRaw` - Возвращает сгенерированную строку запроса и значения для заполнителей.
- [DELETE запросы](#DELETE-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B) - Конструктор запросов DELETE.
    - `create` - Статический метод, инициализация объекта Delete.
    - `getFrom` - Возвращает таблицу, из которой будут удалены строки.
    - `setFrom` - Устанавливает таблицу, из которой будут удалены строки.
    - `getWhere` - Возвращает условие WHERE.
    - `setWhere` - Устанавливает условие WHERE.
    - `getLimit` - Возвращает количество строк, которые будут удалены.
    - `setLimit` - Устанавливает количество строк, которые будут удалены.
    - `getSql` - Возвращает сгенерированную строку запроса.
    - `getSqlRaw` - Возвращает сгенерированную строку запроса и значения для заполнителей.

Основные компоненты
-------------------

[](#основные-компоненты)

### Parser

[](#parser)

Класс Parser - это постобработка запроса. Он заполняет типизированные заполнители значениями.

#### `static function setPDO(\PDO $pdo)`

[](#static-function-setpdopdo-pdo)

Метод устанавливает объект PDO, который будет использоваться для подготовки параметров запроса.

> **Внимание!** Метод setPDO должен быть вызван до начала использования библиотеки.

### From

[](#from)

Компонент From является обязательным для всех запросов. Он представляет из себя конструктор таблицы в запросе, к которой идёт обращение.

#### `static create(string|Select $sql = null, string $alias = null): self`

[](#static-createstringselect-sql--null-string-alias--null-self)

Статический метод, инициализация объекта From.

Аргументы:

1. $sql - строка с именем таблицы в формате 'table\_name' или сразу с алиасом 'table\_name tn', или объект Select, который будет использован в качестве подзапроса.
2. $alias - алиас таблицы.

Если не указан алиас, то он будет сгенерирован автоматически.

#### `getFrom(): string|Select`

[](#getfrom-stringselect)

Возвращает имя таблицы или объект Select.

#### `setFrom(string|Select $sql = null): self`

[](#setfromstringselect-sql--null-self)

Устанавливает имя таблицы или объект Select, который будет использован в качестве подзапроса.

#### `getAlias(): string`

[](#getalias-string)

Возвращает алиас таблицы.

#### `setAlias(string $alias): self`

[](#setaliasstring-alias-self)

Устанавливает алиас таблицы.

#### `getSql(): string`

[](#getsql-string)

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

#### `getSqlRaw(): array`

[](#getsqlraw-array)

Метод используется для внутреннего взаимодействия внутри библиотеки. Но может быть полезен для отладки.

Возвращает массив:

1. 'sql' =&gt; string - строка запроса, которая была сгенерирована, но заполнители не были заменены на значения.
2. 'values' =&gt; array - массив значений для заполнителей.

### Join

[](#join)

Компонент Join представляет из себя конструктор JOIN-а в запросе.

#### `static create(string $type = null, From|string $from = null, Where|string $where_or_lexema = null, $where_value = null): self`

[](#static-createstring-type--null-fromstring-from--null-wherestring-where_or_lexema--null-where_value--null-self)

Статический метод, инициализация объекта Join.

Аргументы:

1. $type - тип JOIN-а. Возможные значения: 'INNER', 'LEFT', 'RIGHT'.
2. $from - объект From или строка с именем таблицы в формате 'table\_name' или сразу с алиасом 'table\_name tn'.
3. $where\_or\_lexema - объект Where или строка с условием JOIN-а.
4. $where\_value - значение для заполнителя в условии JOIN-а.

Также есть статические методы для инициализации объекта Join для каждого типа JOIN-а. в них нет параметра $type:

- static function inner(From|string $from, Where|string $where\_or\_lexema = null, $where\_value = null): self - **INNER JOIN**
- static function left(From|string $from, Where|string $where\_or\_lexema = null, $where\_value = null): self - \*\*LEFT JOIN \*\*
- static function right(From|string $from, Where|string $where\_or\_lexema = null, $where\_value = null): self - **RIGHT JOIN**
- static function innerLateral(From|string $from, Where|string $where\_or\_lexema = null, $where\_value = null): self - \* *INNER JOIN LATERAL*\*
- static function leftLateral(From|string $from, Where|string $where\_or\_lexema = null, $where\_value = null): self - \* *LEFT JOIN LATERAL*\*
- static function rightLateral(From|string $from, Where|string $where\_or\_lexema = null, $where\_value = null): self - \* *RIGHT JOIN LATERAL*\*

#### `getLateral(): bool`

[](#getlateral-bool)

Возвращает true, если JOIN является LATERAL.

#### `setLateral(bool $is = true): self`

[](#setlateralbool-is--true-self)

Устанавливает JOIN как LATERAL.

#### `setType(string $type): self`

[](#settypestring-type-self)

Устанавливает тип JOIN-а. Возможные значения: 'INNER', 'LEFT', 'RIGHT'.

#### `getType(): string`

[](#gettype-string)

Возвращает тип JOIN-а.

#### `setFrom(string|Select|From $from = null, string $alias = null): self`

[](#setfromstringselectfrom-from--null-string-alias--null-self)

Устанавливает таблицу для запроса.

Параметры:

- $from - имя таблицы (в формате с алиасом или без), объект Select (подзапрос) или объект From (созданный заранее).
- $alias - алиас таблицы. (не обязательный). Если не указан, то будет сгенерирован автоматически.

#### `getFrom(): From`

[](#getfrom-from)

Возвращает объект From, который был установлен в запросе.

#### `setWhere(Where $where): self`

[](#setwherewhere-where-self)

Устанавливает объект Where для JOIN-а. По сути, это условие ON.

#### `getWhere(): Where`

[](#getwhere-where)

Возвращает объект Where, который был установлен в запросе.

#### `getSql(): string`

[](#getsql-string-1)

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

#### `getSqlRaw(): array`

[](#getsqlraw-array-1)

Метод используется для внутреннего взаимодействия внутри библиотеки. Но может быть полезен для отладки.

Возвращает массив:

1. 'sql' =&gt; string - строка запроса, которая была сгенерирована, но заполнители не были заменены на значения.
2. 'values' =&gt; array - массив значений для заполнителей.

### Where

[](#where)

Компонент Where представляет из себя конструктор условия. Он может быть использован как для WHERE, так и для ON.

> Внимание! Whare активно использует заполнители, и поддерживает все заполнители из digitalstars/DataBase. Подробнее о них можно прочитать в документации к библиотеке [digitalstars/DataBase](https://github.com/digitalstars/DataBase/).

#### `static create(Where|string $lexema = null, array|string|int $value = null): self`

[](#static-createwherestring-lexema--null-arraystringint-value--null-self)

Статический метод, инициализация объекта Where.

Аргументы:

1. $lexema - строка с условием. Может быть как другим объектом Where, так и строкой, содержащей заполнители.
2. $value - значение для заполнителя в условии. Если нужно передать несколько значений, то передаётся массив. Если нужно передать массив в качестве 1 значения (например для IN), то он должен быть обёрнут в массив.

#### `isEmpty(): bool`

[](#isempty-bool)

Возвращает true, если объект Where пустой.

#### `w_and($lexema = null, $value = null): self`

[](#w_andlexema--null-value--null-self)

Добавляет к текущему объекту Where условие через AND.

#### `w_or($lexema = null, $value = null): self`

[](#w_orlexema--null-value--null-self)

Добавляет к текущему объекту Where условие через OR.

#### `clear(): self`

[](#clear-self)

Очищает текущий объект Where от условий.

#### `getSqlRaw(): ?array`

[](#getsqlraw-array-2)

Метод используется для внутреннего взаимодействия внутри библиотеки. Но может быть полезен для отладки.

Возвращает массив:

1. 'sql' =&gt; string - строка запроса, которая была сгенерирована, но заполнители не были заменены на значения.
2. 'values' =&gt; array - массив значений для заполнителей.

SELECT запросы
--------------

[](#select-запросы)

Класс Select представляет из себя конструктор запросов SELECT.

### `static create(): self`

[](#static-create-self)

Статический метод, инициализация объекта Select.

### `setSelect(array $sql)`

[](#setselectarray-sql)

Устанавливает список полей для выборки. Принимает как массив полей, так и ассоциативный массив, где ключи - это алиасы, а значения - это поля таблицы или функции.

### `addSelectList(array $sql)`

[](#addselectlistarray-sql)

То же самое, что и setSelect, но добавляет поля к уже существующим.

#### Примеры:

[](#примеры)

Передаём массив полей:

```
use DigitalStars\SimpleSQL\Select;
$select = Select::create()->setFrom('table_name tn'); // Устанавливаем таблицу в From

$select->setSelect(['id', 'name', 'age']);
```

```
SELECT tn.id   AS tn_id,
       tn.name AS tn_name,
       tn.age  AS tn_age
FROM table_name tn
```

Передаём массив полей, часть из которых с алиасами, часть вычисляемые:

```
$select->setSelect([
    'id',
    'name',
    'age_now' => 'tn.age',
    'age_plus_10' => 'tn.age + 10',
    'age_plus_20' => 'tn.age + 20'
]);
```

```
SELECT tn.id       AS tn_id,
       tn.name     AS tn_name,
       tn.age      AS age_now,
       tn.age + 10 AS age_plus_10,
       tn.age + 20 AS age_plus_20
FROM table_name tn
```

### `addSelect(string $field, string $alias = null): self`

[](#addselectstring-field-string-alias--null-self)

Добавляет поле в список выборки.

- $field - имя поля или выражение.
- $alias - алиас поля. (не обязательный)

#### Примеры:

[](#примеры-1)

```
use DigitalStars\SimpleSQL\Select;
$select = Select::create()->setFrom('table_name tn'); // Устанавливаем таблицу в From

$select->addSelect('id');
$select->addSelect('name');
$select->addSelect('age', 'age_now');
$select->addSelect('age + 10', 'age_plus_10');
$select->addSelect('age + 20', 'age_plus_20');
```

```
SELECT tn.id    AS tn_id,
       tn.name  AS tn_name,
       age      AS age_now,
       age + 10 AS age_plus_10,
       age + 20 AS age_plus_20
FROM table_name tn
```

### `getSelect(): array`

[](#getselect-array)

Возвращает список полей для выборки. В том же формате, что и передавался в setSelect.

### `setFrom(string|Select|From $from = null, string $alias = null): self`

[](#setfromstringselectfrom-from--null-string-alias--null-self-1)

Устанавливает таблицу для запроса.

Параметры:

- $from - имя таблицы (в формате с алиасом или без), объект Select (подзапрос) или объект From (созданный заранее).
- $alias - алиас таблицы. (не обязательный). Если не указан, то будет сгенерирован автоматически.

#### Примеры:

[](#примеры-2)

Пример 1:

```
use DigitalStars\SimpleSQL\Select;
use DigitalStars\SimpleSQL\Components\From;
$select = Select::create()->setSelect(['id', 'name', 'age']);

$select->setFrom('table_name tn');
// Или
$select->setFrom('table_name tn', 'tn');
// Или
$from = From::create('table_name tn');
$select->setFrom($from);
// Или
$from = From::create('table_name', 'tn');
$select->setFrom($from);
// Или
$select->setFrom('table_name');
```

```
SELECT tn.id   AS tn_id,
       tn.name AS tn_name,
       tn.age  AS tn_age
FROM table_name tn
```

Пример 2:

```
use DigitalStars\SimpleSQL\Select;

$select_sub = Select::create()
    ->setSelect(['id', 'name', 'age'])
    ->setFrom('table_name tn');

$select = Select::create()
    ->setSelect(['tn_name', 'tn_age'])
    ->setFrom($select_sub, 'sub');
```

```
SELECT sub.tn_name AS sub_tn_name,
       sub.tn_age  AS sub_tn_age
FROM (SELECT tn.id   AS tn_id,
             tn.name AS tn_name,
             tn.age  AS tn_age
      FROM table_name tn) sub
```

### `getFrom(): From`

[](#getfrom-from-1)

Возвращает объект From, который был установлен в запросе.

### `getJoinList(): array`

[](#getjoinlist-array)

Возвращает список объектов Join, которые были установлены в запросе.

### `addJoin(array|Join $join): self`

[](#addjoinarrayjoin-join-self)

Добавляет объект Join (или массив объектов), в список JOIN-ов.

### `setJoin(array|Join $join = null): self`

[](#setjoinarrayjoin-join--null-self)

Устанавливает объект Join (или массив объектов), в список JOIN-ов.

### Примеры использования JOIN-ов:

[](#примеры-использования-join-ов)

Пример 1:

```
use DigitalStars\SimpleSQL\Components\Join;

$select = Select::create()
    ->setSelect(['name', 'age', 't2.other_info', 't3.other_info'])
    ->setFrom('table_name_one', 'tno')
    ->addJoin(Join::inner('table_name_two t2', 'tno.id = t2.id'))
    ->addJoin(Join::left('table_name_three t3', 'tno.id = t3.id'));
```

```
SELECT tno.name      AS tno_name,
       tno.age       AS tno_age,
       t2.other_info AS t2_other_info,
       t3.other_info AS t3_other_info
FROM table_name_one tno
         INNER JOIN table_name_two t2 on (tno.id = t2.id)
         LEFT JOIN table_name_three t3 on (tno.id = t3.id)
```

Пример 2 (с подзапросом):

```
$select1 = Select::create()
    ->setSelect(['id', 'name', 'age', 't2.other_info', 't3.other_info'])
    ->setFrom('table_name_one', 'tno')
    ->addJoin(Join::inner('table_name_two t2', 'tno.id = t2.id'))
    ->addJoin(Join::left('table_name_three t3', 'tno.id = t3.id'));

$select = Select::create()
    ->setSelect(["t.id", "inf.tno_name", 'sum' => 'inf.t2_other_info + IFNULL(inf.t3_other_info, 0)'])
    ->setFrom('main_table', 't')
    ->addJoin(Join::inner(From::create($select1, 'inf'), 'inf.tno_id = t.id'));
```

```
SELECT t.id                                             AS t_id,
       inf.tno_name                                     AS inf_tno_name,
       inf.t2_other_info + IFNULL(inf.t3_other_info, 0) AS sum
FROM main_table t
         INNER JOIN (SELECT tno.id        AS tno_id,
                            tno.name      AS tno_name,
                            tno.age       AS tno_age,
                            t2.other_info AS t2_other_info,
                            t3.other_info AS t3_other_info
                     FROM table_name_one tno
                              INNER JOIN table_name_two t2 on (tno.id = t2.id)
                              LEFT JOIN table_name_three t3 on (tno.id = t3.id)) inf on (inf.tno_id = t.id)
```

### `getWhere(): Where`

[](#getwhere-where-1)

Возвращает объект Where, который был установлен в запросе.

### `setWhere(Where $where = null): self`

[](#setwherewhere-where--null-self)

Устанавливает объект Where в запросе.

Пример:

```
use DigitalStars\SimpleSQL\Select;
use DigitalStars\SimpleSQL\Components\Where;

$select = Select::create()
    ->setSelect(['id', 'name', 'age'])
    ->setFrom('table_name tn')
    ->setWhere(Where::create('age > ?i', 18)->w_and('name = ?s', 'John'));
```

```
SELECT tn.id   AS tn_id,
       tn.name AS tn_name,
       tn.age  AS tn_age
FROM table_name tn
WHERE (age > 18 AND name = 'John')
```

### `getGroupBy(): array`

[](#getgroupby-array)

Возвращает список полей для группировки.

### `setGroupBy(array $group_by = null): self`

[](#setgroupbyarray-group_by--null-self)

Устанавливает список полей для группировки. Принимает массив алиасов или полей (как в setSelect).

### Пример:

[](#пример)

```
use DigitalStars\SimpleSQL\Select;

$select = Select::create()
    ->setSelect(['name', 'age', 'sum_salary' => 'SUM(salary)'])
    ->setFrom('table_name tn')
    ->setGroupBy(['name', 'age']);
```

```
SELECT tn.name     AS tn_name,
       tn.age      AS tn_age,
       SUM(salary) AS sum_salary
FROM table_name tn
GROUP BY tn.name, tn.age
```

### `getHawing(): Where`

[](#gethawing-where)

Возвращает объект Where, который был установлен в запросе.

### `setHawing(Where $hawing = null): self`

[](#sethawingwhere-hawing--null-self)

Устанавливает объект Where в запросе.

Пример:

```
use DigitalStars\SimpleSQL\Select;
use DigitalStars\SimpleSQL\Components\Where;

$select = Select::create()
    ->setSelect(['name', 'age', 'sum_salary' => 'SUM(salary)'])
    ->setFrom('table_name tn')
    ->setGroupBy(['name', 'age'])
    ->setHawing(Where::create('sum_salary > ?i', 1000));
```

```
SELECT tn.name     AS tn_name,
       tn.age      AS tn_age,
       SUM(salary) AS sum_salary
FROM table_name tn
GROUP BY tn.name, tn.age
HAVING (sum_salary > 1000)
```

### `getOrderBy(): array`

[](#getorderby-array)

Возвращает список полей для сортировки в том формате, в котором они были установлены (setOrderBy).

### `setOrderBy(array $order_by = null): self`

[](#setorderbyarray-order_by--null-self)

Устанавливает список полей для сортировки. Ключ - это поле (как в методе setGroupBy), значение - это направление сортировки.

Пример:

```
use DigitalStars\SimpleSQL\Select;

$select = Select::create()
    ->setSelect(['name', 'age', 'sum_salary' => 'SUM(salary)'])
    ->setFrom('table_name tn')
    ->setGroupBy(['name', 'age'])
    ->setOrderBy(['name' => 'ASC', 'age' => 'DESC']);
```

```
SELECT tn.name     AS tn_name,
       tn.age      AS tn_age,
       SUM(salary) AS sum_salary
FROM table_name tn
GROUP BY tn.name, tn.age
ORDER BY tn.name ASC, tn.age DESC
```

### `addOrderBy(array $order_by): self`

[](#addorderbyarray-order_by-self)

Добавляет полей для сортировки в конец уже заданных. При наличии повторяющихся ключей, они не будут перезаписаны.

### `getLimit(): ?int`

[](#getlimit-int)

Возвращает количество строк, которые будут выбраны. В случае, если не установлено, то возвращает null.

### `setLimit(?int $limit = null): self`

[](#setlimitint-limit--null-self)

Устанавливает количество строк, которые будут выбраны.

### `getShareMode(): ?string`

[](#getsharemode-string)

Возвращает режим блокировки. В случае, если не установлено, то возвращает null.

### `setShareModeUpdate(): self`

[](#setsharemodeupdate-self)

Устанавливает режим FOR UPDATE.

### `setShareModeShare(): self`

[](#setsharemodeshare-self)

Устанавливает режим FOR SHARE.

### `setShareModeDefault(): self`

[](#setsharemodedefault-self)

Устанавливает режим блокировки по умолчанию.

### `getSelectArray(): array`

[](#getselectarray-array)

Собирает и возвращает массив, который содержит в себе все поля выборки в формате, который используется в запросе.

Ключ - это алиас поля, значение - это поле или выражение.

### `getSelectFeels(): array`

[](#getselectfeels-array)

Возвращает массив алиасов полей выборки.

### `getSql(): string`

[](#getsql-string-2)

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

### `getSqlRaw(): array`

[](#getsqlraw-array-3)

Метод используется для внутреннего взаимодействия внутри библиотеки. Но может быть полезен для отладки.

Возвращает массив:

1. 'sql' =&gt; string - строка запроса, которая была сгенерирована, но заполнители не были заменены на значения.
2. 'values' =&gt; array - массив значений для заполнителей.

INSERT запросы
--------------

[](#insert-запросы)

Класс Insert представляет из себя конструктор запросов INSERT.

### `static create(): self`

[](#static-create-self-1)

Статический метод, инициализация объекта Insert.

### `setFields(array $sql = []): self`

[](#setfieldsarray-sql---self)

Устанавливает список полей для вставки. Принимает ассоциативный массив, где ключи - это поля, а значения - это заполнитель (или значение для вставки).

### `addField(string $field, string|int|float $placeholder_or_raw_value = null): self`

[](#addfieldstring-field-stringintfloat-placeholder_or_raw_value--null-self)

Добавляет поле в список полей для вставки.

Параметры:

- $field - имя поля.
- $placeholder\_or\_raw\_value - заполнитель (или значение для вставки).

### `getFields(): array`

[](#getfields-array)

Возвращает список полей для вставки. (в том же формате, в котором они были установлены методом setFields).

### `setValues(array|Select $values = []): self`

[](#setvaluesarrayselect-values---self)

Устанавливает список значений для вставки. Принимает массив значений или объект Select (если нужно вставить значения как из результата выполнения Select запроса).

> **Внимание!** Каждый элемент массива - это массив значений всех полей, под каждый заполнитель

### `addValues(array $values = []): self`

[](#addvaluesarray-values---self)

Добавляет значения для вставки.

### `getValues(): array|Select`

[](#getvalues-arrayselect)

Возвращает список значений для вставки (или объект Select). В том же формате, в котором они были установлены методом setValues.

### `setFrom(string|Select|From $from = null, string $alias = null): self`

[](#setfromstringselectfrom-from--null-string-alias--null-self-2)

Устанавливает таблицу, в которую будет производиться вставка.

### `getFrom(): From`

[](#getfrom-from-2)

Возвращает объект From, который был установлен в запросе.

### `setIgnoreDuplicate(bool $is_ignore_duplicate = true): self`

[](#setignoreduplicatebool-is_ignore_duplicate--true-self)

Устанавливает флаг IGNORE в INSERT.

### `getIgnoreDuplicate(): bool`

[](#getignoreduplicate-bool)

Возвращает true, если установлен флаг IGNORE.

### `setFieldsUpdateOnDuplicate(array $fields = []): self`

[](#setfieldsupdateonduplicatearray-fields---self)

Устанавливает список полей, которые будут обновлены в случае, если запись уже существует.

### `addFieldsUpdateOnDuplicate(array|string $fields): self`

[](#addfieldsupdateonduplicatearraystring-fields-self)

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

### `getFieldsUpdateOnDuplicate(): array`

[](#getfieldsupdateonduplicate-array)

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

### `getSql(): string`

[](#getsql-string-3)

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

### `getSqlRaw(): array`

[](#getsqlraw-array-4)

Метод используется для внутреннего взаимодействия внутри библиотеки. Но может быть полезен для отладки.

Возвращает массив:

1. 'sql' =&gt; string - строка запроса, которая была сгенерирована, но заполнители не были заменены на значения.
2. 'values' =&gt; array - массив значений для заполнителей.

### Примеры использования:

[](#примеры-использования)

Пример 1:

```
use DigitalStars\SimpleSQL\Insert;

$insert = Insert::create()
    ->setFields(['name' => '?s', 'age' => '?i'])
    ->addValues(['John', 25])
    ->addValues(['Mike', 30])
    ->setFrom('table_name')
    ->setFieldsUpdateOnDuplicate(['age']);

// Или

$insert = Insert::create()
    ->setFields(['name' => '?s', 'age' => '?i'])
    ->setValues([['John', 25], ['Mike', 30]])
    ->setFrom('table_name')
    ->setFieldsUpdateOnDuplicate(['age']);
```

```
INSERT INTO table_name (name, age)
VALUES ('John', 25),
       ('Mike', 30)
    ON DUPLICATE KEY UPDATE age = VALUES(age)
```

Пример 2 (значения из Select запроса):

```
use DigitalStars\SimpleSQL\Insert;
use DigitalStars\SimpleSQL\Select;

$select = Select::create()
    ->setSelect(['name', 'age'])
    ->setFrom('table_name_2');

$insert = Insert::create()
    ->setFields(['name' => '?s', 'age' => '?i'])
    ->setValues($select)
    ->setFrom('table_name')
    ->setIgnoreDuplicate();
```

```
INSERT IGNORE INTO table_name (name, age)
SELECT tn2.name AS tn2_name, tn2.age AS tn2_age
FROM table_name_2 tn2
```

UPDATE запросы
--------------

[](#update-запросы)

Класс Update представляет из себя конструктор запросов UPDATE.

### `static create(): self`

[](#static-create-self-2)

Статический метод, инициализация объекта Update.

### `setSet(array $sql = [], array $values = []): self`

[](#setsetarray-sql---array-values---self)

Устанавливает список полей и их значений для обновления.

Параметры:

- $sql - ассоциативный массив, где ключи - это поля, а значения - это заполнитель (или значение для вставки без валидации).
- $values - массив значений, которые будут подставлены под заполнители

### `addSet(string $field, string|int|float $placeholder_or_raw_value = null, $value = null): self`

[](#addsetstring-field-stringintfloat-placeholder_or_raw_value--null-value--null-self)

Добавляет поле и его значение для обновления.

Параметры:

- $field - имя поля.
- $placeholder\_or\_raw\_value - заполнитель (или значение для вставки без валидации).
- $value - значение для заполнителя.

### `getSet(): array`

[](#getset-array)

Возвращает список полей и их значений для обновления.

Возвращает ассоциативный массив, где ключи - это поля, а значения, следующий массив:

- `field` - имя поля.
- `placeholder` - заполнитель (или значение для вставки без валидации).
- `value` - значение для заполнителя.

### `getSetSQLRaw(): array`

[](#getsetsqlraw-array)

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

Возвращает массив:

1. 'sql' =&gt; SQL запрос, который был сгенерирован, но заполнители не были заменены на значения.
2. 'values' =&gt; массив значений для заполнителей.

### `getFrom(): From`

[](#getfrom-from-3)

Возвращает объект From, который был установлен в запросе.

### `setFrom(string|Select|From $from = null, string $alias = null): self`

[](#setfromstringselectfrom-from--null-string-alias--null-self-3)

Устанавливает таблицу, в которой будет производиться обновление.

### `getJoinList(): array`

[](#getjoinlist-array-1)

Возвращает список объектов Join, которые были установлены в запросе. (По аналоии с Select)

### `setJoin(array|Join $join = null): self`

[](#setjoinarrayjoin-join--null-self-1)

Устанавливает объект Join (или массив объектов), в список JOIN-ов. (По аналоии с Select)

### `addJoin(array|Join $join): self`

[](#addjoinarrayjoin-join-self-1)

Добавляет объект Join (или массив объектов), в список JOIN-ов. (По аналоии с Select)

### `getWhere(): Where`

[](#getwhere-where-2)

Возвращает объект Where, который был установлен в запросе. Отвечает за условие WHERE.

### `setWhere(Where $where = null): self`

[](#setwherewhere-where--null-self-1)

Устанавливает объект Where в запросе. Отвечает за условие WHERE.

### `getLimit(): ?int`

[](#getlimit-int-1)

Возвращает количество строк, которые будут обновлены. В случае, если не установлено, то возвращает null.

### `setLimit(?int $limit = null): self`

[](#setlimitint-limit--null-self-1)

Устанавливает количество строк, которые будут обновлены.

### `getSql(): string`

[](#getsql-string-4)

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

### `getSqlRaw(): array`

[](#getsqlraw-array-5)

Метод используется для внутреннего взаимодействия внутри библиотеки. Но может быть полезен для отладки.

Возвращает массив:

1. 'sql' =&gt; string - строка запроса, которая была сгенерирована, но заполнители не были заменены на значения.
2. 'values' =&gt; array - массив значений для заполнителей.

### Примеры использования:

[](#примеры-использования-1)

Пример 1:

```
use DigitalStars\SimpleSQL\Update;

$update = Update::create()
    ->setSet(['name' => '?s', 'age' => '?i'], ['John', 25])
    ->setFrom('table_name')
    ->setWhere(Where::create('tn.id = ?i', 1));

// Или

$update = Update::create()
    ->addSet('name', '?s', 'John')
    ->addSet('age', '?i', 25)
    ->setFrom('table_name')
    ->setWhere(Where::create('tn.id = ?i', 1));
```

```
UPDATE table_name tn
SET tn.name = 'John',
    tn.age  = 25
WHERE (tn.id = 1)
```

Пример 2:

```
use DigitalStars\SimpleSQL\Update;
use DigitalStars\SimpleSQL\Select;

$select = Select::create()
    ->setSelect(['name', 'age', 'id'])
    ->setFrom('table_name_2');

$update = Update::create()
    ->setSet(['name' => '?s', 'age' => '?i'], ['John', 25])
    ->setFrom('table_name')
    ->setWhere(Where::create('tn.id = ?i', 1))
    ->setJoin(Join::inner(From::create($select, 'tn2'), 'tn2.tn2_id = tn.id'));
```

```
UPDATE table_name tn
    INNER JOIN (SELECT tn2.name AS tn2_name,
                       tn2.age  AS tn2_age,
                       tn2.id   AS tn2_id
                FROM table_name_2 tn2) tn2 on (tn2.tn2_id = tn.id)
SET tn.name = 'John',
    tn.age  = 25
WHERE (tn.id = 1)
```

DELETE запросы
--------------

[](#delete-запросы)

Класс Delete представляет из себя конструктор запросов DELETE.

### `static create(): self`

[](#static-create-self-3)

Статический метод, инициализация объекта Delete.

### `setFrom(string|Select|From $from = null, string $alias = null): self`

[](#setfromstringselectfrom-from--null-string-alias--null-self-4)

Устанавливает таблицу, из которой будет производиться удаление.

### `getFrom(): From`

[](#getfrom-from-4)

Возвращает объект From, который был установлен в запросе.

### `getWhere(): Where`

[](#getwhere-where-3)

Возвращает объект Where, который был установлен в запросе. Отвечает за условие WHERE.

### `setWhere(Where $where = null): self`

[](#setwherewhere-where--null-self-2)

Устанавливает объект Where в запросе. Отвечает за условие WHERE.

### `getLimit(): ?int`

[](#getlimit-int-2)

Возвращает количество строк, которые будут удалены. В случае, если не установлено, то возвращает null.

### `setLimit(?int $limit = null): self`

[](#setlimitint-limit--null-self-2)

Устанавливает количество строк, которые будут удалены. Если не установлено, то удаляются все строки.

### `getSql(): string`

[](#getsql-string-5)

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

### `getSqlRaw(): array`

[](#getsqlraw-array-6)

Метод используется для внутреннего взаимодействия внутри библиотеки. Но может быть полезен для отладки.

Возвращает массив:

1. 'sql' =&gt; string - строка запроса, которая была сгенерирована, но заполнители не были заменены на значения.
2. 'values' =&gt; array - массив значений для заполнителей.

### Примеры использования:

[](#примеры-использования-2)

Пример 1:

```
use DigitalStars\SimpleSQL\Delete;

$delete = Delete::create()
    ->setFrom('table_name')
    ->setWhere(Where::create('id = ?i', 1))
    ->setLimit(1);
```

```
DELETE FROM `table_name` WHERE (id = 1) LIMIT 1
```

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

4

Last Release

827d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f44e3174e7941f909b990f66bf9e345cedc106001c7eecd45907f6bd659b2ae8?d=identicon)[digitalstar-company](/maintainers/digitalstar-company)

---

Top Contributors

[![zerox-k](https://avatars.githubusercontent.com/u/67025914?v=4)](https://github.com/zerox-k "zerox-k (21 commits)")

### Embed Badge

![Health badge](/badges/digitalstars-simple-sql/health.svg)

```
[![Health](https://phpackages.com/badges/digitalstars-simple-sql/health.svg)](https://phpackages.com/packages/digitalstars-simple-sql)
```

###  Alternatives

[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k117.2M118](/packages/jdorn-sql-formatter)[propel/propel1

Propel is an open-source Object-Relational Mapping (ORM) for PHP5.

8351.6M87](/packages/propel-propel1)[jfelder/oracledb

Oracle DB driver for Laravel

11518.4k](/packages/jfelder-oracledb)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
