Laravel Eloquent PostgreSQL保存数组错误:preg_replace():参数不匹配

时间:2016-02-02 16:53:03

标签: php arrays postgresql laravel-4 eloquent

我正在使用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 行。

我在这个问题why do I get preg_replace() error when submitting a post form in Laravel?上读到,当我们尝试保存数组时会发生此错误。

但我真的想在我的Postgresql记录中存储一个数组(我应该能够这样做)。 你知道这样做的方法吗?

1 个答案:

答案 0 :(得分: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);
}

我希望它会对你有所帮助。 如果您的数组包含单引号和其他字符(如反斜杠),请注意,您必须将它们转义。

如果没有人有更好的方法,我就是买家!