postgresql - 如何在 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_'', '''')'
解决方案
如果您['column' => 'value']
对属性使用语法,则框架期望数组的值是简单值并相应地对待它们。这就是为什么您的表达式被转换为字符串值而不是用作表达式的原因。
如果您想避免这种情况,您需要yii\db\Expression
像这样包装您的值:
ModelName::updateAll([
'my_column' => new \yii\db\Expression("REPLACE(my_column1,'removed_','')")
]);
推荐阅读
- maven - 从 lib-release 而不是 lib-snapshot 下载 Maven 版本
- powershell - 获取 ADUser -Identity
- swift - 按 ID 编辑所有记录(Swift 4、CoreData)
- android - Automatic updates on Android devices (Apps) - Kotlin
- rust - 如何迭代 itertools::chunks
- python - Requesting an API call that requires an oauth token in python
- java - Webrtc 部分仅在 Release Build 上崩溃在 Debug 构建上工作正常
- typescript - '< 类型的参数
>' 不可分配给类型为 'Type< 的参数 >' - java - 如何从 Firebase 数据库中检索数据以显示标记?
- php - 为什么在php_curl中无法获取带有`CURLINFO_CONTENT_LENGTH_DOWNLOAD`的pdf文件的长度?