首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Yii中向db插入数组列

在Yii中向db插入数组列
EN

Stack Overflow用户
提问于 2012-01-19 13:25:53
回答 2查看 4.4K关注 0票数 2

我需要在数据库中插入一个数组字段,我很高兴地注意到PostGreSQL具有这个功能。但现在我无法使用表活动记录插入数据。

我试过以下电话,但没有成功。

代码语言:javascript
复制
$active_record->array_column = $_array_of_values;

这给了我一个例外

引发的异常:CDbCommand未能执行SQL语句: SQLSTATE22P02:无效文本表示:7错误:数组值必须以"{“或维度信息开头

我也试过用

代码语言:javascript
复制
foreach($_array_of_values as $value){
    $active_record->array_column[] = $value;
}

这告诉我

FeatureRaw::$colors_names对过载性能的间接改性没有影响

有人能帮我吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-19 13:55:17

数据必须是插入表格 (数组的文本表示):

代码语言:javascript
复制
INSERT INTO tbl (arr_col) VALUES ('{23,45}')

或者:

代码语言:javascript
复制
INSERT INTO tbl (arr_col) VALUES ('{foo,"bar, with comma"}')

因此,您需要将数组值括在'{}'中,并用逗号,分隔它们。在包含逗号的文本值周围使用双引号""

我列出了要在相关答案中插入数组的更多语法变体

票数 3
EN

Stack Overflow用户

发布于 2016-01-28 03:55:16

对于同样有问题的人:

我没有检查Yii1行为,但在Yii2中,您只需插入数组,就像在他的评论中提到的那样,插入格式正确的字符串:

代码语言:javascript
复制
$activeRecord->arrayField = '{' . implode(',',$array_values) . '}';

当然,当您的$array_values有带有逗号的字符串时,您需要做出额外的努力。在加载ActiveRecord之后,您仍然需要将值转换回数组。

您可以在ActiveRecord的beforeSave()和afterLoad()中进行这些转换,并且不需要手动转换值。

UPD.最近,我为Yii2做了一个简单的行为,让它使用带有ActiveRecord的数组字段,而不需要手工构建字段:kossmoss/yii2 2-postgresql-数组-字段。这是解决这个问题的更广泛的方法,我希望它能有所帮助。对于那些使用Yii1的人:您可以研究包代码,并创建与您的框架兼容的解决方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8926781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档