我需要将数组字段插入数据库中,我很高兴地注意到PostGreSQL具有该功能。但现在我无法使用表格活动记录插入数据。
我尝试过以下调用但没有成功
$active_record->array_column = $_array_of_values;
给了我例外
异常引发:CDbCommand无法执行SQL语句:SQLSTATE [22P02]:文本表示无效:7错误:数组值必须以" {"或维度信息
我也尝试使用
foreach($_array_of_values as $value){
$active_record->array_column[] = $value;
}
告诉我
间接修改重载属性FeatureRaw :: $ colors_names无效
任何人都可以帮我吗? 谢谢!
答案 0 :(得分:3)
数据必须为inserted in the form(ARRAY的文字表示):
INSERT INTO tbl (arr_col) VALUES ('{23,45}')
或者:
INSERT INTO tbl (arr_col) VALUES ('{foo,"bar, with comma"}')
因此,您需要将数组值括在'{}'
中,并用逗号,
分隔。在包含逗号的文本值周围使用双引号""
。
我列出more syntax variants在相关答案中插入数组。
答案 1 :(得分:3)
对于那些也有同样问题的人:
我没有检查Yii1的行为,但是在Yii2中,你只需将数组作为正确形成的字符串插入,如他在评论中提到的Erwin Brandstetter:
$activeRecord->arrayField = '{' . implode(',',$array_values) . '}';
当你的$ array_values包含逗号等字符串时,你需要做额外的工作。在加载ActiveRecord之后你仍然需要将值转换回数组。
您可以在ActiveRecord的beforeSave()和afterLoad()之前进行这些转换,您无需手动转换值。
<强> UPD 即可。最近我为Yii2做了一个简单的行为,在没有手动字段构建的情况下使用ActiveRecord的数组字段:kossmoss/yii2-postgresql-array-field。这是解决问题的更通用的方法,我希望它会有所帮助。对于那些使用Yii1的人:您可以调查包代码并创建与您的框架兼容的自己的解决方案。