我的数据结构包含以下列:
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 loop
(我不喜欢)
foreach($finals, $final)
{
ModalName::create($final);
}
有没有办法可以在单个语句中插入这样的数据结构,而不是循环遍历数组的每个元素。像
这样的东西ModelName::create($finals);
请注意,我试图用硬编码的静态值代替数组替换'data'键的值,并正确插入行。
多维数组$ 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)
我收到以下查询异常:数组到字符串转换
答案 0 :(得分:1)
您可以使用
插入批量数组Model::insert($array);
了解更多信息
<强>插入强>
查询构建器还提供了一种插入方法,用于将记录插入数据库表。 insert方法接受列名和值的数组:
DB::table('users')->insert(
['email' => 'john@example.com', 'votes' => 0]
);
您甚至可以通过传递一组数组,通过一次调用插入表中的几条记录。每个数组代表一个要插入表中的行:
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
注意强>
这不会更新您需要在此处手动传递的created_at
和updated_at
答案 1 :(得分:0)
将强制转换的字段/数据包装到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 STRING,但会保留结构,只要您在模型中具有此结构即可。
protected $casts = [
'data' => 'array',
];