Laravel Eloquent PostgreSQL save array Ошибка: preg_replace (): Несоответствие параметров

1

Я работаю над 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 (и я должен это сделать). Вы знаете, как это сделать?

  • 0
    Можете ли вы также опубликовать свое мнение? Я думаю, что вы отправляете вход массива из представления и пытаетесь сохранить без цикла foreach.
  • 0
    Это именно то, что я попробовал кнопку, даже когда я пытаюсь сохранить массив PHP, он терпит неудачу с той же ошибкой.
Показать ещё 4 комментария
Теги:
eloquent
arrays
laravel-4

1 ответ

1
Лучший ответ

Я нашел способ сохранить массив в текстовом поле массива 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);
}

Надеюсь, это поможет вам. Будьте осторожны, если ваш массив содержит одинарные кавычки и другие персонажи, такие как обратные косые черты, вы должны избегать их.

Если никто не имеет лучшего способа, я покупатель!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню