В моем приложении 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',
];
protected $dates = [];
protected $casts = [];
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('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',
];
}
}
Поле в HrLeaveDetail, creation_type_id уникально по отношению к оставляемому идентификатору_представления и идентификатору компании.
От что у меня выше в правилах:
'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('leave_types')->where(function ($query) {
return $query->where('leave_type_code', $this->leave_type_code)
->where('company_id', $this->company_id);
})
],
работают отлично.
Однако, как мне изменить:
'employment_type_id' => 'required|array',
'employment_type_id.*' => 'required',
, чтобы написать обязательное и уникальное правило для занятости_тип_ид, компания_ид и отпуск_тип_ид. Это должно быть похоже на то, что у меня есть:
'leave_type_name' => [
Rule::unique('leave_types')->where(function ($query) {
return $query->where('leave_type_name', $this->leave_type_name)
->where('company_id', $this->company_id);
})
],
Это образец:
https://i.stack.imgur.com/IXAdA.png
Примечание: Employment_type_id - это основной столбец.
Как мне этого добиться?
Спасибо.