У меня есть профиль модели, который принадлежит модели пользователя. Модель профиля имеет один «информационный» столбец JSON, в котором хранится много данных, таких как личная информация, рабочая информация, контактная информация и т. Д. Вот структура поля JSON, но в рабочей области будет несколько данных, например, опыт работы , текущая работа и т. д.
До сих пор мне удавалось хранить только одну рабочую информацию и показывать в блейд-файле. Но мне нужно хранить несколько рабочих данных.
Вот как выглядит поле JSON:
{"work": {"info": "work", "company": "Augnitive", "working_to": null,
"designation": "Software Engineer", "working_from": "2019-01-14",
"responsibilities": null}, "contact": {"info": "contact", "email":
"ki.tushar21@gmail.com", "mobile": "01681654863", "address": "House 156,
Sultangonj, Rayer Bazar Dhaka 1209, West Agargaon, West Agargaon",
"facebook": "fb.com", "linkedin": "linkedin.com", "citizenship":
"Bangladesh"}, "personal": {"bday": "2019-01-07", "info": "personal",
"blood": "A(+VE)", "gender": "Male"}, "education": {"info": "education",
"edu_type": "SSC", "institute": "svf", "graduation": "2010"}}
Вот как я храню данные в моем контроллере:
protected $info_mapping = [
'work' => 'work',
'education' => 'education',
'contact' => 'contact',
'personal' => 'personal'
];
public function store(Request $request)
{
$type = $request->get('info');
$name = $request->get('name');
if (isset($name)) {
$user = Auth::user();
$user->name = $request->get('name');
$user->student_id = $request->get('student_id');
$user->save();
}
if (!isset($this->info_mapping[$type])) {
return response()->json([
'error' => true,
'message' => "Type is invalid",
]);
}
$form_data = $request->except('name', '_token', 'student_id');
$profile = auth()->user()->profile;
$data = [];
if (isset($profile->information)) {
$data = $profile->information;
}
$data[$this->info_mapping[$type]] = $form_data;
$profile->information = $data;
$profile->save();
return redirect()->back();
}
Из моего файла Blade я передаю скрытое поле ввода, чтобы проследить, из какой формы поступают данные, например:
<input name="info" value="work" hidden>
<div class="form-group">
<label class="col-md-4 control-label">Designation</label>
<div class="col-md-6 inputGroupContainer">
<div class="input-group {{ $errors->has('designation')?'has_error':'' }}">
<span class="input-group-addon"><i class="glyphicon glyphicon-briefcase"></i></span>
<input name="designation" placeholder="Designation" class="form-control" type="text" required>
@include('errors.form',['field' => 'designation'])
</div>
</div>
</div>