当前位置: 首页 > 知识库问答 >
问题:

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

干弘深
2023-03-14

我正在研究Laravel 4和Postgreql。我试图存储一个数组在Postgreql数组字段。这是我的表声明:

CREATE TABLE person_title (
    id serial primary key,
    title text,
    name_list text[]
);

我试着用雄辩插入一行:

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

此错误来自供应商/laravel/框架/src/照明/支持/helpers.php:990。

我读过这个问题,为什么在Laravel中提交帖子表单时会出现preg_replace()错误?尝试保存数组时会发生此错误。

但我确实想在我的Postgresql记录上存储一个数组(我应该能够做到这一点)。你知道怎么做吗?

共有1个答案

常永长
2023-03-14

我找到了一种方法来存储在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);
}

我希望它能帮助你。如果数组包含单引号和其他字符(如反斜杠),则必须对其进行转义。

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

 类似资料:
  • 嘿,伙计们,我是拉威尔的新朋友。我有这张桌子 我如何能够获取每个科目的is_correct列计数? 谢谢伙计们!

  • 我有以下雄辩的模型: 用户id 邮政编码 评论| id |发布| id |用户| id 使用eloquent,如何获取特定用户尚未发表评论的所有帖子? 到目前为止,我试过: 在模范岗位: 在模型注释中:

  • 我有以下模型与填充属性: 我有一个表格来更新作业,其中包括一些多选下拉列表,如下所示: 在我的控制器中,我有以下方法来更新作业,但我得到错误: 似乎使用

  • 如何将以下查询转换为Laravel4雄辩ORM?

  • 我有一个表,其中包括一列浏览器版本。我只是想从记录集中知道每种浏览器有多少种。所以,我需要这样结束:总记录:10;InternetExplorer 8:2;铬25:4;火狐20:4。(总计10) 这是我的两便士: 当然,它只包含3个浏览器,而不是每个浏览器的数量。我该怎么做呢?

  • 在发布这篇文章之前,我做了很多研究。 我得到以下错误时,试图插入一个记录到PostgreSQL使用Laravel雄辩的ORM。 这是错误: 这是数据库表创建模式: 这就是我试图执行的代码: 我创建了一个模型类FbPostShareCount扩展雄辩。 我知道laravel不支持复杂的键,但当我使用MySQL时,这个问题并没有发生