Вставка столбца массива в БД в Yii - PullRequest
2 голосов
/ 19 января 2012

Мне нужно было вставить поле массива в базу данных, и я был рад отметить, что 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 ]

3 голосов
/ 28 января 2016

Для тех, у кого такая же проблема:

Я не проверял поведение Yii1, но в Yii2 вы просто можете вставить массив в виде правильно сформированной строки, как упомянул Эрвин Брандштеттер в своем комментарии:

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

Конечно, вам нужно приложить дополнительные усилия, когда ваши $ array_values ​​содержат строки с запятыми и т. Д. И вам все еще нужно преобразовать значение обратно в массив после загрузки ActiveRecord.

Эти преобразования можно выполнить в beforeSave () и afterLoad () ActiveRecord, и вам не нужно будет преобразовывать значения вручную.

UPD . Недавно я сделал простое поведение для Yii2 для использования полей массива с ActiveRecord без ручного создания полей: kossmoss / yii2-postgresql-array-field . Это более обобщенный способ решения проблемы, и я надеюсь, что он поможет. Для тех, кто использует Yii1: вы можете исследовать код пакета и создать собственное решение, совместимое с вашей платформой.

3 голосов
/ 19 января 2012

Данные должны быть вставлены в форму (текстовое представление массива):

INSERT INTO tbl (arr_col) VALUES ('{23,45}')

Или:

INSERT INTO tbl (arr_col) VALUES ('{foo,"bar, with comma"}')

Поэтому вам необходимо приложитьЗначения массива в '{}' и разделите их запятой ,.Используйте двойные кавычки "" вокруг текстовых значений, которые содержат запятую.

Я перечислил больше вариантов синтаксиса , чтобы вставить массивы в связанный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...