В моем проекте Laravel5.8 у меня есть код проверки уникальных правил для создания:
MYSQL
ALTER TABLE `hr_holiday_dates`
ADD UNIQUE KEY `holidaydates_unique_key` ('group_id','holiday_name','date_from');
Модель
class HrHolidayDate extends Model
{
protected $table = 'hr_holiday_dates';
protected $primaryKey = 'id';
protected $fillable = [
'holiday_name',
'group_id',
'date_from',
'date_to',
'description',
];
public function holidaygroup()
{
return $this->belongsTo('App\Models\Hr\HrHolidayGroup','group_id');
}
}
Контроллер
public function edit($id)
{
$userCompany = Auth::user()->company_id;
abort_unless(\Gate::allows('holiday_date_edit'), 403);
$holiday = HrHolidayDate::where('id', $id)->first();
$holidaygroups = HrHolidayGroup::where('company_id', $userCompany)->get();
return view('hr.holiday_dates.edit')->with('holiday', $holiday)->with('holidaygroups', $holidaygroups);
}
public function update(UpdateHolidayDateRequest $request, $id)
{
$dateFrom = Carbon::parse($request->date_from);
$dateTo = Carbon::parse($request->date_to);
$holiday = HrHolidayDate::find($id);
$holiday->holiday_name = $request->holiday_name;
$holiday->group_id = $request->group_id;
$holiday->date_from = $dateFrom;
$holiday->date_to = $dateTo;
$holiday->description = $request->description;
$holiday->save();
Session::flash('success', 'Holiday is updated successfully');
return redirect()->route('hr.holiday_dates.index');
}
Правила
'holiday_name' => [
'required',
'min:3',
'max:80',
Rule::unique('holiday_dates')->where(function ($query) {
return $query->where('group_id', $this->group_id)
->where('holiday_name', $this->holiday_name)
->where('date_from', Carbon\Carbon::parse($this->date_from)->format('Y-m-d'));
})
],
, который работает.
holiday_name является основным полем, и оно уникально в отношении group_id и date_from. holiday_dates - это имя таблицы, а holiday_date - маршрут.
Как я пытался сделать это для проверки уникальных правил для обновления, но это не работает:
'holiday_name' =>
[
'required',
'min:3',
'max:80',
Rule::unique('holiday_dates')->where(function ($query) {
return $query
->where('group_id', 1)
->where('holiday_name', 1)
->where('date_from', Carbon\Carbon::parse($this->date_from)->format('Y-m-d'));
})->ignore($this->holiday_date)
],
Как сделать Я разрешаю это.
Спасибо