首页 > 解决方案 > 如何在 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]:字符串数据,右截断:7 错误:对于类型字符变化(50)的值太长正在执行的 SQL 是:UPDATE“my_table”SET“my_column1”='REPLACE(my_column1,''removed_'', '''')'

标签: postgresqlyii2

解决方案


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

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

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

推荐阅读