Я работаю над Laravel 4 и Postgresql. Я пытаюсь сохранить массив в поле массива Postgresql. Вот объявление моей таблицы:
CREATE TABLE person_title (
id serial primary key,
title text,
name_list text[]
);
Я пытаюсь вставить строку с помощью Eloquent:
public function create_person_title() {
$title = Input::get('title');
$name_list = Input::get('name_list');
$data = [
'title' : $title,
'name_list' : $name_list,
];
PersonTitle::create($data);
}
Я получаю эту ошибку:
preg_replace(): Parameter mismatch, pattern is a string while replacement is an array
Эта ошибка исходит из строки vendor/laravel/framework/src/Illuminate/Support/helpers.php: 990.
Я прочитал по этому вопросу, почему я получаю ошибку preg_replace() при отправке формы сообщения в Laravel? что эта ошибка возникает, когда мы пытаемся сохранить массив.
Но я действительно хочу сохранить массив в записи Postgresql (и я должен это сделать). Вы знаете, как это сделать?
Я нашел способ сохранить массив в текстовом поле массива postgresql, изменив свой список. Вот мой новый взгляд:
public function create_person_title() {
$title = Input::get('title');
$name_list = Input::get('name_list');
// Can't save a null value
if (!$name_list) {
$name_list = [];
}
$name_list = json_encode($name_list);
$name_list = "'".preg_replace("#^\[(.*)\]$#", '{\1}', $name_list)."'";
$name_list = DB::raw($name_list);
$data = [
'title' : $title,
'name_list' : $name_list,
];
PersonTitle::create($data);
}
Надеюсь, это поможет вам. Будьте осторожны, если ваш массив содержит одинарные кавычки и другие персонажи, такие как обратные косые черты, вы должны избегать их.
Если никто не имеет лучшего способа, я покупатель!