В моем приложении Laravel -5.8 я разрабатываю динамическое поле ввода c. Это включает две таблицы:
class HrLeaveType extends Model
{
public $timestamps = false;
protected $table = 'hr_leave_types';
protected $primaryKey = 'id';
protected $fillable = [
'company_id',
'leave_type_name',
'number_of_days',
'leave_type_code',
];
public function leavetypedetail()
{
return $this->hasMany('App\Models\Hr\LeaveTypeDetail');
}
}
class HrLeaveTypeDetail extends Model
{
public $timestamps = false;
protected $table = 'hr_leave_type_details';
protected $primaryKey = 'id';
protected $fillable = [
'leave_type_id',
'company_id',
'employment_type_id',
'no_of_days',
];
protected $casts = [
'data' => 'array',
];
public function leavetype()
{
return $this->belongsTo('App\Models\Hr\HrLeaveType');
}
public function employmenttype()
{
return $this->belongsTo('App\Models\Hr\HrEmploymentType');
}
}
Две модели используются для полей ввода Dynami c. HrLeaveType
является основной моделью. Это один ко многим. Один LeaveType
имеет много LeaveTypeDetail
. LeaveTypeDetail
находится в полях массива.
Я создал это RequestRule:
class StoreLeaveTypeRequest extends FormRequest
{
public function rules()
{
return [
'leave_type_name' => [
'required',
'string',
'min:5',
'max:100',
Rule::unique('leave_types')->where(function ($query) {
return $query->where('leave_type_name', $this->leave_type_name)
->where('company_id', $this->company_id);
})
],
'leave_type_code' => [
'nullable',
'string',
'min:3',
'max:20',
Rule::unique('hr_leave_types')->where(function ($query) {
return $query->where('leave_type_code', $this->leave_type_code)
->where('company_id', $this->company_id);
})
],
'number_of_days' => 'required|numeric|min:0|max:500',
'employment_type_id' => 'required|array',
'employment_type_id.*' => [
'required',
Rule::unique('hr_leave_type_details')->where(function ($query) {
return $query->where('leave_type_id', $this->leave_type_id);
})
],
];
}
}
Поле в HrLeaveDetail
, employment_type_id
уникально по отношению к leave_type_id
и company_id
.
employment_type_id
и no_of_days
- поля массива из таблицы hr_leave_details
Контроллер
public function create()
{
$userCompany = Auth::user()->company_id;
$employmenttypes = HrEmploymentType::where('company_id', $userCompany)->get();
return view('hr.leave_types.create')
->with('employmenttypes', $employmenttypes);
}
public function store(StoreLeaveTypeRequest $request)
{
$userCompany = Auth::user()->company_id;
DB::beginTransaction();
try {
$leavetype = new HrLeaveType();
$leavetype->leave_type_name = $request->leave_type_name;
$leavetype->leave_type_code = $request->leave_type_code;
$leavetype->description = $request->description;
$leavetype->company_id = Auth::user()->company_id;
$leavetype-->save();
foreach ( $request->employment_type_id as $key => $employment_type_id){
$insert_array = [
'no_of_days' => $request->no_of_days[$key],
'employment_type_id' => $request->employment_type_id[$key],
'leave_type_id' => $leavetype->id,
'company_id' => Auth::user()->company_id,
];
HrLeaveTypeDetail::create($insert_array );
}
DB::commit();
Session::flash('success', 'Leave Type is created successfully');
return redirect()->route('hr.leave_types.index');
} catch (Exception $exception) {
// dd($exception->getMessage());
DB::rollback();
Session::flash('error', 'Action failed! Please try again');
return redirect()->route('hr.leave_types.index');
}
}
Это страница формы:
https://i.stack.imgur.com/RGp8w.png
Когда я нажимал на "Отправить" на create.blade, я ожидал, что приложение сохранится в базе данных, но у меня появилась эта ошибка:
Столбец не найден: 1054 Неизвестный столбец «Employment_type_id.0» в «Где предложение» (SQL: выберите количество (*) в качестве совокупности из hr_leave_type_details
, где employment_type_id
. 0
= 1
Как мне решить эту проблему?