如何在 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
我在 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