【发布时间】:2020-08-30 16:37:39
【问题描述】:
我正在为一家医疗慈善机构创建仪表板。
我在 Laravel 7 中有一个多步骤表单设置。它分三个步骤记录事件(因此使用 session())。 在第 2 步,它要求用户选择给药的药物。 药物来自数据库表(药物),并使用他们检查的内联复选框显示给用户。然后将其作为数组返回给控制器。
我的问题如下:
- 如何通过 DrugUsed 模型将数组(由内联复选框生成)中的数据获取到 drugUsed 数据库表中?
BLADE VIEW (addincident2.blade.php) [...替换了一些删除的代码以便于阅读]
<form method="POST" action="{{ route('incident.doadd.2') }}">
@csrf
...
<div class="form-group row">
<label for="incident_drugs" class="col-md-4 col-form-label text-md-right">{{ __('Drugs Used') }}</label>
<div class="col-md-6">
<div class="form-check">
@foreach ($drugs as $drug)
<label class="form-check-label">
<input class="form-check-input @error('incident_drugs') is-invalid @enderror" name="drugs_used[]" type="checkbox" id="{{ $drug->drug_name }}" value="{{ $drug->drug_name }}">{{ $drug->drug_name }}
</label></br >
@endforeach
</div>
@error('incident_drugs')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
...
</form>
事件控制器
// NEW INCIDENT ADD METHOD
public function AddIncidentPage1 (Request $request)
{
$request->session()->forget('incident');
$request->session()->forget('drugused');
$incident = $request->session()->get('incident');
$drugused = $request->session()->get('drugused');
$pagetitle = "Add an Incident";
$incidenttypes = DB::table('incident_types')->pluck('incident_type');
return view('incidents.addincident1', compact('pagetitle', 'incidenttypes', 'incident', 'drugused'));
}
public function DoAddIncident1 (Request $request)
{
$validatedData = $request->validate([
'incident_date' => 'required|date',
'incident_number' => 'required|numeric|digits:8',
'incident_location' => 'required|alpha_num|min:2|max:4',
'incident_type' => 'required',
'incident_desc' => 'required',
'incident_duration' => 'required',
'incident_work' => 'boolean',
'incident_mileage' => 'numeric',
'incident_case_review' => 'boolean',
'incident_sd' => 'boolean',
]);
$incident = new Incident();
$incident->fill($validatedData);
$request->session()->put('incident', $incident);
if($validatedData['incident_sd'] == 0)
{
return redirect('/incidents/add/2');
}
elseif($validatedData['incident_case_review'] == 1)
{
return redirect('/incidents/add/3');
}
else
{
$incident = $request->session()->get('incident');
$incident->fill($validatedData);
$incident->incident_userid = Auth::user()->esr_number;
$incident->save();
return redirect()->intended('/incidents')->with('success','Incident created successfully!');
}
}
public function AddIncidentPage2 (Request $request)
{
$incident = $request->session()->get('incident');
$drugused = $request->session()->get('drugused');
$drugs = Drug::all();
$pagetitle = "Add an Incident";
return view('incidents.addincident2', compact('pagetitle', 'incident', 'drugs', 'drugused'));
}
public function DoAddIncident2 (Request $request)
{
$validatedData = $request->validate([
'incident_fos' => 'boolean',
]);
$incident = $request->session()->get('incident');
$incident->fill($validatedData);
$request->session()->put('incident', $incident);
if($incident['incident_case_review'] == 1)
{
return redirect('/incidents/add/3');
}
else
{
$incident->incident_userid = Auth::user()->esr_number;
$incident->save();
return redirect()->intended('/incidents')->with('success','Incident created successfully!');
}
}
public function AddIncidentPage3 (Request $request)
{
$incident = $request->session()->get('incident');
$drugused = $request->session()->get('drugused');
$pagetitle = "Add an Incident";
return view('incidents.addincident3', compact('pagetitle', 'incident', 'drugused'));
}
public function DoAddIncident3 (Request $request)
{
$validatedData = $request->validate([
'incident_review_notes' => 'required_if:incident_case_review,1',
]);
$incident = $request->session()->get('incident');
$incident->fill($validatedData);
$incident->incident_userid = Auth::user()->esr_number;
$incident->save();
$request->session()->forget('incident');
return redirect()->intended('/incidents')->with('success','Incident created successfully!');
}
【问题讨论】:
-
在数据库中存储为 JSON 字符串,并使用
$cast属性在该列的模型类中转换为数组。 laravel.com/docs/7.x/eloquent-mutators#attribute-casting