我的目标是使用相同的表单同时插入许多记录。我已经在表单元素中创建了一个函数,它将复制所有字段并使用一个提交按钮传递所有数据。因此视图和传递给控制器的数据没有问题。
我有一个数组:
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。
感谢有人可以提供帮助。 提前谢谢。
答案 0 :(得分:1)
我仍然认为你在做什么有什么问题,但这可能是一个解决方案,虽然我不认为这是最好的选择
正如我已经告诉过你的那样,你应该按照以下方式接收数据
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); }
但是,如果你坚持以自己的方式做事,你有很多方法就是一个
DWORD
我建议您观看此视频https://www.youtube.com/watch?v=Efr7SUrBUQw并重构您的表单以正确的方式获取数据