我在Atk4模型中有以下代码:
$sql = 'REPLACE(\'[dnum]\', \'{DD}\', LPAD(DAY([issue_date]), 2, \'0\'))';
$f = $this->addExpression('calc_document_number',
[$sql, 'type' => 'string', 'read_only' => true]);上面的代码应该将dnum列中的dnum替换为填充的issue_date列。直接在数据库中搜索/排序原因。
现在看来,SQL的{DD}部分是由Atk4解析/处理的。是否有可能避开花括号,这样Atk4就会忽略它们?
注意:\{DD\}不起作用
发布于 2018-06-08 11:19:23
是的你是对的。转义大括号没有在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
https://stackoverflow.com/questions/50743824
复制相似问题