如何在 yii2 updateAll() 中使用替换查询?

How to use replace query in yii2 updateAll()?

我正在使用 Postgresql。我的 Yii2 更新代码是

 ModelName::updateAll(['my_column' => "REPLACE(my_column1,'removed_','')"]);

实际查询是

update my_table set my_column = REPLACE(my_column1,'removed_','');

当我 运行 我的 yii2 代码显示错误时

SQLSTATE[22001]: String data, right truncated: 7 ERROR: value too long for type character varying(50) The SQL being executed was: UPDATE "my_table" SET "my_column1"='REPLACE(my_column1,''removed_'','''')'

如果您对属性使用 ['column' => 'value'] 语法,则框架期望数组的值是简单值并相应地对待它们。这就是为什么您的表达式被转换为字符串值而不是用作表达式的原因。

如果你想避免这种情况,你需要像这样将你的值包装在 yii\db\Expression 中:

 ModelName::updateAll([
    'my_column' => new \yii\db\Expression("REPLACE(my_column1,'removed_','')")
]);