Skip to content
Oleg Grigoriev edited this page Mar 28, 2016 · 3 revisions

Форматы ?col и ?cols

Формат указания столбца используется:

  1. При вставке столбца с помощью ?c или ?col
  2. Внутри некоторых форматов, таких, как ?set
  3. Внутри ?cols см. ниже

Строка

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

$col = 'id';

$pattern = 'SELECT ?col FROM `table`';
$data = [$col];
SELECT `id` FROM `table`

Порядковый массив

Задаёт цепочку пути к столбцу, например, [$table, $col] или [$db, $table, $col]. Либо в других базах могут быть другие компоненты (схема в Pg).

$col = ['db', 'table', 'col'];

$pattern = 'SELECT ?col FROM `table`';
$data = [$col];
SELECT `db`.`table`.`col` FROM `table`

Ассоциативный массив

Может содержать следующие поля:

  • col (array|string)
  • table (array|string)
  • db (array|string)
  • func (string)
  • as (string)
  • value (string)

Должно быть, как минимум одно из следующих полей: col, value или func.

col - как и выше, либо непосредственно название столбца, либо массив компонентов.

table и db введены для большего удобства в некоторых случаях. Все эти компоненты сливаются в название столбца db+table+col.

$col = [
    'db' => 'dbname', 
    'table' => 'test', 
    'col' => 'id'
];

$pattern = 'SELECT ?col FROM `table`';
$data = [$col];
SELECT `dbname`.`test`.`id` FROM `table`

Либо, таблица содержится в отдельной переменной:

$table = ['dbname', 'test'];

$col = [
    'table' => $table, 
    'col' => 'id'
];

$pattern = 'SELECT ?col FROM `table`';
$data = [$col];

Аналогично:

SELECT `dbname`.`test`.`id` FROM `table`

func

Накладываемая функция

$col = [
    'col' => 'value',
    'func' => 'SUM',
];

$pattern = 'SELECT ?col FROM `table`';
$data = [$col];
SELECT SUM(`value`) FROM `table`

value

Прибавляемое значение.

$col = [
    'col' => 'value',
    'value' => 1,
];

$pattern = 'UPDATE `t` SET `value`=?col';
$data = [$col];
UPDATE `t` SET `value`=`value`+1

Так использовать особенного смысла нет, используется внутри ?set.

as

Алиас:

$col = [
    'col' => 'value',
    'as' => 'new',
];

$pattern = 'SELECT ?c FROM `table`';
$data = [$col];
SELECT `value` AS `new` FROM `table`

Только func

$col = [
    'func' => 'NOW',
];
$table->update(['x' => $col]);
UPDATE `table` SET `x`=NOW()

value + func:

$col = [
    'func' => 'COUNT',
    'value' => 1,
];
$pattern = 'SELECT ?c FROM `table`';
SELECT COUNT(1) FROM `table`

Если value нужны вынести за скобки, а функцию вызывать без аргументов, следует указать col=NULL:

$col = [
    'func' => 'NOW',
    'col' => null,
    'value' => 1,
];
$table->update(['x' => $col]);
UPDATE `table` SET `x`=NOW()+1

TRUE - *

Если col=TRUE, он заменяется на звёздочку.

$col = [
    'func' => 'COUNT',
    'value' => 2,
    'col' => true,
    'as' => 'c',
];
$pattern = 'SELECT ?c FROM `t`';
SELECT COUNT(*)+2 AS `c` FROM `t`

Комбинация

Алиас:

$col = [
    'table' => 'test',
    'col' => 'value',
    'func' => 'COUNT',
    'as' => 'q',
];

$pattern = 'SELECT ?c ...';
$data = [$col];
SELECT COUNT(`test`.`value`) AS `q` ...

?cols

Этот формат используется в плейсхолдере ?cols и в методе select() Table.

Просто массив столбцов, каждый из которых имеет описанный выше формат.

$cols = [
    'id',
    'name',
    [
        'col' => 'value',
        'as' => 'new',
    ],
];

$pattern = 'SELECT ?cols ...';
$data = [$cols];
SELECT `id`,`name`,`value` AS `new` ...
Clone this wiki locally