如何在 Atk4 DQL 中转义大括号

How to escape curly braces in Atk4 DQL

我在 Atk4 模型中有以下代码:

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

上面的代码应该用填充的 issue_date 列替换 dnum 列中的 {DD}。 search/sort 原因直接在数据库中。

似乎 SQL 的 {DD} 部分目前是 Atk4 的 parsed/processed。是否可以转义花括号以便 Atk4 忽略它们?

注意:\{DD\} 不起作用

是的,你是对的。转义大括号不是在 DSQL 中而不是在数据中实现的。 您可以通过直接使用 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