Laravel 批量插入许多具有相同形式的条目
Posted
技术标签:
【中文标题】Laravel 批量插入许多具有相同形式的条目【英文标题】:Laravel bulk insert many entries with same form 【发布时间】:2018-08-27 03:19:48 【问题描述】:我的目标是使用相同的表单同时插入多条记录。我已经在表单元素中创建了一个函数,它将复制所有字段并使用一个提交按钮传递所有数据。所以视图和传递给控制器的数据没有问题。
我有一个数组:
array:8 [▼
"_token" => "XLQVP4Hbm85SlZDFa6OnjK0LCoMOsrfs8jGCUwMj"
"id" => null
"client_id" => array:2 [▼
0 => "1"
1 => "1"
]
"sample_code" => array:2 [▼
0 => "sadasdas"
1 => "qwewqewqeqweq"
]
"sample_description" => array:2 [▼
0 => "dasdsad"
1 => "dsadsadasd"
]
"quantity" => array:2 [▶]
"analysis_requested" => array:2 [▼
0 => "dasdsadasd"
1 => "dsadsadas"
]
"special_instruction" => array:2 [▼
0 => "asdadasda"
1 => "asdasdaada"
]
]
上面给出的数组只是我从表单中传递的示例数据。这可能是 3、4 等等,取决于用户输入。
如何使用批量插入插入此查询?
这是我在控制器中的代码。
data = array(
array(
'client_id' => $input['client_id'][0],
'sample_code' => $input['sample_code'][0],
'sample_description' => $input['sample_description'][0],
'quantity' => $input['quantity'][0],
'analysis_requested' => $input['analysis_requested'][0],
'special_instruction' => $input['special_instruction'][0],
'status' => 'for_testing',
'created_at' => $date_today,
'updated_at' => $date_today,
),
array(
'client_id' => $input['client_id'][1],
'sample_code' => $input['sample_code'][1],
'sample_description' => $input['sample_description'][1],
'quantity' => $input['quantity'][1],
'analysis_requested' => $input['analysis_requested'][1],
'special_instruction' => $input['special_instruction'][1],
'status' => 'for_testing',
'created_at' => $date_today,
'updated_at' => $date_today,
),
);
AnalysisRequest::insert($data);
我将如何通过使用每个循环来简化此代码?顺便说一句,我将如何获得我插入的每个数据的最后一个 id。
如果有人可以提供帮助,我们将不胜感激。 提前致谢。
【问题讨论】:
如果您有适当数组格式的数据,那么您可以使用一个插入函数插入所有数据。 我会在数组内的变量数据中做一个 foreach 吗? 你找到解决方案了吗? 【参考方案1】:我仍然认为你所做的事情有问题,但这可能是一个解决方案,尽管我认为这不是最好的选择
正如我已经告诉过你的,你应该通过以下方式接收数据
array:2 [▼
"_token" => "XLQVP4Hbm85SlZDFa6OnjK0LCoMOsrfs8jGCUwMj"
"items" => array:2 [▼
0 => [▼
"client_id" => 1
"sample_code" => "aaa"
"sample_description" => "aaa"
"quantity" => array:2 [▶]
"analysis_requested" => "aaa"
"special_instruction" => "aaa"
]
1 => [▼
"client_id" => 1
"sample_code" => "bbb"
"sample_description" => "bbb"
"quantity" => array:2 [▶]
"analysis_requested" => "bbb"
"special_instruction" => "bbb"
]
]
]
这样就可以了
foreach($data as $item) AnalysisRequest::create($item);
但如果你坚持按照自己的方式做事,那么你有很多方法就是其中之一
$newCollection = collect($input);
$datas = $collection->except(['_token', 'id']);
$items = [];
foreach($datas->all() as $field => $data) // $field is field name
foreach($data as $key => $value) // $key is item key
$item[$key][$field] = $value;
foreach($items as $item) AnalysisRequest::create($item);
我建议您观看此视频https://www.youtube.com/watch?v=Efr7SUrBUQw 并重构您的表单以以正确的方式获取数据
【讨论】:
以上是关于Laravel 批量插入许多具有相同形式的条目的主要内容,如果未能解决你的问题,请参考以下文章