Как избежать фигурных скобок в Atk4 DQL - PullRequest
0 голосов
/ 07 июня 2018

У меня есть следующий код в модели Atk4:

$sql = 'REPLACE(\'[dnum]\', \'{DD}\', LPAD(DAY([issue_date]), 2, \'0\'))';
$f = $this->addExpression('calc_document_number',
    [$sql, 'type' => 'string', 'read_only' => true]);

Приведенный выше код должен заменить {DD} в столбце dnum на дополненный столбец issue_date.По причинам поиска / сортировки в базе данных напрямую.

Кажется, что часть {DD} SQL в настоящее время анализируется / обрабатывается Atk4.Можно ли избежать фигурных скобок, чтобы Atk4 игнорировал их?

note: \{DD\} не работает

1 Ответ

0 голосов
/ 08 июня 2018

Да, вы правы.Экранирующие скобки не реализованы в DSQL, а не в Data.Вы можете обойти эту проблему, используя метод expr() напрямую и передав {DD} в качестве параметра (который не будет заменен снова).

Таким образом, он работает для меня:

$expr = $model->expr('REPLACE([dnum], [], LPAD(DAY([issue_date]), 2, \'0\'))',[
    '{DD}',
]);

$f = $model->addExpression('calc_document_number',
    [$expr, 'type' => 'string', 'read_only' => true]);
// here is no need to set type=string and read_only=true because expression field will automatically be readonly and with string type

echo $m->action('select')->getDebugQuery();

Также создан тикет на будущую ссылку: https://github.com/atk4/dsql/issues/144

...