【问题标题】:How to escape curly braces in Atk4 DQL如何在 Atk4 DQL 中转义花括号
【发布时间】:2018-11-17 12:31:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: atk4


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 2015-11-23
      • 2021-11-20
      相关资源
      最近更新 更多