我正在研究拉维4和Postgresql。
我试图在Postgresql数组字段中存储一个数组。
这是我的餐桌申报单:
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
此错误来自vendor/laravel/framework/src/illumed/Support/helpers.php:990行。
我读到这个问题why do I get preg_replace() error when submitting a post form in 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);
}
我希望它能帮助你。
如果数组包含单引号和其他字符(如反斜杠),则必须对其进行转义。
如果没有人有更好的方法,我就是买家!