在Yii中将数组列插入到数据库中

时间:2012-01-19 13:25:53

标签: arrays postgresql model yii

我需要将数组字段插入数据库中,我很高兴地注意到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无效

任何人都可以帮我吗? 谢谢!

2 个答案:

答案 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的人:您可以调查包代码并创建与您的框架兼容的自己的解决方案。