I am creating a dashboard for a medical charity.
I have a multistep form setup in Laravel 7. It logs an incident in three steps (hence the session() usage). On step 2, it asks the user to select drugs administered. The drugs come from a database table (drugs) and is displayed to the user using inline checkboxes which they check. This then is returned to the controller as an array.
My problem is as follows:
- How can I get the data from the array (generated by the inline checkboxes) into the drugs_used database table, through the DrugUsed model?
BLADE VIEW (addincident2.blade.php) [... Replaces some code removed to make easier to read]
<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>
IncidentController
// 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!');
}
$castproperty. laravel.com/docs/7.x/eloquent-mutators#attribute-casting