如何在Atk4 DQL中逃避花括号

时间:2018-06-07 14:29:09

标签: atk4

我在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。直接用于数据库中的搜索/排序原因。

似乎SQL的{DD}部分当前由Atk4解析/处理。是否有可能逃避花括号,以便Atk4会忽略它们?

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

1 个答案:

答案 0 :(得分:2)

是的,你是对的。转义大括号未在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