【发布时间】:2020-07-17 14:42:02
【问题描述】:
在我的 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)
],
我该如何解决。
谢谢
【问题讨论】:
-
holiday_date 是否是您表中的唯一字段。您应该只传递系统生成的唯一 ID,例如来自 Eloquent 模型实例的自动递增 ID 或 UUID。你试过 id 吗?
-
不是假期日期。 holiday_date 是路线。 holiday_name 与 group_id、date_from 一起是唯一的。见 MYSQL 查询 ALTER TABLE
hr_holiday_datesADD UNIQUE KEYholidaydates_unique_key('group_id','holiday_name','date_from'); -
那么是否有任何唯一的关键字段存在或不像 Id 之类的?或者您只是使用复合唯一键。显示您的表结构。
-
'group_id','holiday_name','date_from 是共同唯一的
-
也可以传递整个模型实例。您是否尝试过模型实例?
标签: laravel