【问题标题】:Laravel Eloquent PostgreSQL save array Error : preg_replace(): Parameter mismatchLaravel Eloquent PostgreSQL 保存数组错误:preg_replace():参数不匹配
【发布时间】:2016-05-11 14:24:30
【问题描述】:

我正在开发 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 记录上存储一个数组(我应该能够做到)。 你知道怎么做吗?

【问题讨论】:

  • 您也可以发表您的看法吗?我认为您正在从视图中发送数组输入并尝试在没有 foreach 循环的情况下保存。
  • 这正是我尝试过的按钮,即使我尝试保存原始 PHP 数组,它也会失败并出现同样的错误。
  • 如果您的输入有数组,那么您应该使用 foreach 将数据保存在数据库中。
  • 所以请在这里发表您的看法
  • 我找到了解决方案。我添加了名为 create_person_title 的视图。感谢您的帮助:)

标签: php arrays postgresql laravel-4 eloquent


【解决方案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);
}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 2014-10-21
    • 1970-01-01
    • 2023-03-29
    • 2016-01-25
    • 1970-01-01
    • 2021-12-23
    • 2015-03-21
    相关资源
    最近更新 更多