2012-01-19 5 views
2

データベースに配列フィールドを挿入する必要があり、PostGreSQLにその機能があることに気付きました。しかし今は、テーブルのアクティブレコードを使用してデータを挿入できません。Yiiのdbに配列カラムを挿入する

は、私は私に私も試してみました

Exception Raised:CDbCommand failed to execute the SQL statement: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: array value must start with "{" or dimension information

例外を与えていない成功

$active_record->array_column = $_array_of_values; 

と、以下の呼び出しを試してみましたが私に語ったこの使用

foreach($_array_of_values as $value){ 
    $active_record->array_column[] = $value; 
} 

Indirect modification of overloaded property FeatureRaw::$colors_names has no effect

誰も私にこれを手伝ってもらえますか? ありがとう!

答えて

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は、関連する回答に配列を挿入するために記載しました。また、同じ問題を抱えている人のために

+0

これは、配列を挿入するためにアクティブなレコードを使用できないということですか? Sheesh。 –

+0

@AnandSainath:私はActive Recordsについて十分に分かりません。私は道があると思うだろう。 PostgreSQLの構文バリエーションへのリンクを追加しました。 –

+0

さて、あなたが何を意味していたのですか。ちょうど私はYiiでそれを行う方法を見つけることができませんでした。だから私は、データを一緒に繋ぎ合わせて配列列に割り当てるためにimplodeを使用しなければならなかった。 –

3

私はYii1の動作をチェックしませんでしたが、アーウィンBrandstetterが彼のコメントで述べたようにYii2にあなたは、単に配列として適切に形成された文字列を挿入することができます。

$activeRecord->arrayField = '{' . implode(',',$array_values) . '}'; 

もちろん、$ array_valuesにコンマなどの文字列がある場合には、さらに努力する必要があります。また、ActiveRecordを読み込んだ後でも値を配列に戻す必要があります。

これらの変換は、ActiveRecordのbeforeSave()およびafterLoad()で行うことができ、値を手動で変換する必要はありません。

UPD。最近、私はYii2が手作業でフィールドを構築することなくActiveRecordで配列フィールドを使用するという簡単な動作を行った:kossmoss/yii2-postgresql-array-field。それは問題を解決するためのより一般化された方法であり、私はそれが助けてくれることを願っています。 Yii1を使用する人は、パッケージコードを調べて、フレームワークと互換性のある独自の解決策を作成できます。

+0

これは、postgresql配列データ型のyii2グリッドビューフィルタリングに役立ちますか?ありがとう – glyph

+0

@glyph私は遅刻の返事にとても残念です。はい、私は配列フィールドとフィルタリングでうまく動作するグリッドビューを使用します。 –

関連する問題