gpt4 book ai didi

php - 带有包含数组的列的 Laravel 批量插入

转载 作者:行者123 更新时间:2023-12-05 05:19:18 25 4
gpt4 key购买 nike

我有一个包含以下列的数据结构:

id => increments()
name => string()
data => string()

在我的模型中,我将数据列转换为数组。

    protected $casts = [
'data' => 'array'
];

在 for 循环中,我创建了一个名为 $data 的多维数组,并将其分配给 $temp 数组的“数据键”,然后将其插入一个名为 $finals 的数组。

$temp = [
'name' => $variable1,
'data' => $data
]

array_push($finals, $temp)

不幸的是,当我有一个其中一个值是数组的多维数组时,Laravel 的批量插入不允许我执行批量插入。为了插入这种类型的多维数组,我必须创建以下 foreach 循环(我不喜欢)

foreach($finals, $final)
{
ModalName::create($final);
}

有没有一种方法可以在单个语句中插入这样的数据结构,而不是遍历数组的每个元素。有点像

ModelName::create($finals);

请注意,我已尝试用硬编码静态值替换“数据”键的值来代替数组,并且行已正确插入。

多维数组 $finals 看起来像这样。

array:2 [
0 => [
'name' => 'name_value',
'data' => [
"key" => "value",
"key2" => "value2"
]
]
1 => [
'name' => 'name_value2',
'data' => [
'key' => 'value',
'key2' => 'value2'
]
]
]

编辑::

请注意,当我尝试使用

ModelName::create($finals) or 
ModalName::insert($finals) or
DB::table('table_name')->insert($finals)

我得到以下查询异常:数组到字符串的转换

最佳答案

将转换后的字段/数据包装成json_encode:

$insert = [
0 => [
'name' => 'name_value',
'data' => json_encode([
"key" => "value",
"key2" => "value2"
])
]
1 => [
'name' => 'name_value2',
'data' => json_encode([
'key' => 'value',
'key2' => 'value2'
])
]
]

然后插入:

Model::insert($insert);

这不会创建一个 JSON 字符串,但只要您在模型中有这个结构,它就会保留该结构:

protected $casts = [
'data' => 'array',
];

关于php - 带有包含数组的列的 Laravel 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46538824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com