我在具有不同字段的表中有一个表单。我希望能够一次存储所有数据。我搜索堆栈溢出,我得到的所有答案都无法解决问题。因此,我必须发布自己的问题。 视图
<td><input type="text" name="sflt[]" value="{{ $r['fltno'] }}" readonly="readonly" class="form-control"/></td>
<td><input type="text" name="smodel[]" value="{{ $r['model']}}" readonly="readonly" class="form-control"/></td>
<td><input type="text" name="sengine[]" value="{{ $r['engine_type'] }}" readonly="readonly" class="form-control"/></td>
<td><input type="text" name="sloc[]" value="{{ $r['location'] }}" readonly="readonly" class="form-control"/></td>
<td><input type="text" name="sstye[]" value="{{ $sty }}" readonly="readonly" class="form-control"/></td>
<td><input type="text" name="snsvr[]" value="{{ $nsvr}}" readonly="readonly" class="form-control"/></td>
控制器
$data = [];
**//Get the input variables**
$fltno= $request['sflt'];
$model = $request['smodel'];
$engine = $request['sengine'];
$loc = $request['sloc'];
//在提取到空数组时存储每个变量
foreach($fltno as $fltno)
{
$data[] = [
'fltno'=>$request['sflt'],
'model'=>$request['smodel'],
'engine'=>$request['sengine'],
loc'=>$request['sloc'],
'serviceType'=>$request['sstye'],
'nextSvr'=> $request['snsvr']
];
}
ModelName::insert($data);
执行此操作时,它引发以下错误:为foreach()提供了无效的参数
请,我在做错什么,还是一次将所有这些数据插入数据库的最佳方法是什么
答案 0 :(得分:3)
嗨,戴夫,我想你想做这样的事情
$data = $request->all();
$finalArray = array();
foreach($data as $key=>$value){
array_push($finalArray, array(
'fltno'=>$value['sflt'],
'model'=>$value['smodel'],
'engine'=>$value['sengine'],
'loc'=>$value['sloc'],
'serviceType'=>$value['sstye'],
'nextSvr'=> $value['snsvr'] )
);
});
Model::insert($finalArray);
这将提交所有数据。我假设您正在使用这些键在请求中获取数组。
希望这会有所帮助。
答案 1 :(得分:2)
我认为您在检索请求正文时犯了错误
$fltno = $request->input('sflt');
对于foreach我认为您可以做到
$fltnos = $request->input('sflt');
foreach($fltnos as $fltno) {
}
如果您使用的是ORM
$fltnos = $request->input('sflt');
$models = $request->input('smodel');
$engines = $request->input('sengine');
$locs = $request->input('sloc');
foreach($fltnos as $key => $fltno) {
$modelName = new ModelName;
$modelName->fltno = $fltno;
$modelName->model = isset($models[$key]) ? $models[$key] : ''; // this is just workaround, you must make sure all field have same length if want to do this
...
$modelName->save()
}
答案 2 :(得分:1)
这是我可以在代码中实现的工作示例。
$competition_que = [];
foreach ($input['options'] as $key => $value) {
$competition_que[$key]['competition_id'] = $request->competition_id;
$competition_que[$key]['question_id'] = $question->id;
$competition_que[$key]['options'] = $input['options'][$key];
$competition_que[$key]['created_at'] = Carbon::now();
$competition_que[$key]['updated_at'] = Carbon::now();
$competition_que[$key]['is_answer'] = ($key == $input['is_answer']) ? 'true' : 'false';
}
// return $competition_que;
CompetitionAnswer::insert($competition_que);
答案 3 :(得分:1)
我认为您可以这样做
$fltnos = $request->input('sflt', []); // second parameter is to set default value
$models = $request->input('smodel', []);
$engines = $request->input('sengine', []);
$locs = $request->input('sloc', []);
在保存之前,您还需要先验证批量数据
您可以这样做
public function store(Request $request)
{
$validatedData = $request->validate([
'sflt.*' => 'email|unique:users',
'smodel.*' => 'required'
]);
if(validatedData) {
foreach($fltnos as $key => $fltno) {
$modelName = new ModelName;
$modelName->fltno = $fltno;
...
$modelName->save()
}
}
}