【问题标题】:Laravel - Request Rules Validation for update not workingLaravel - 请求规则验证更新不起作用
【发布时间】: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_dates ADD UNIQUE KEY holidaydates_unique_key ('group_id','holiday_name','date_from');
  • 那么是否有任何唯一的关键字段存在或不像 Id 之类的?或者您只是使用复合唯一键。显示您的表结构。
  • 'group_id','holiday_name','date_from 是共同唯一的
  • 也可以传递整个模型实例。您是否尝试过模型实例?

标签: laravel


【解决方案1】:

好的。你有 id 作为主键。因此,当您要更新资源时,您将拥有模型实例,如下所示。

$hrHolidayDate = HrHolidayDate::find($id); // or any other way to get the model instance.

并更新规则如下。

规则

'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($hrHolidayDate->id)
]

【讨论】:

  • 我在哪里添加这个。在模型类或控制器中?
  • 我在控制器中有这个:$holiday = HrHolidayDate::find($id);所以当我应用这个时: })->ignore($holiday->id) 。我收到此错误:未定义变量:假期
  • Print_r 或 var_dump 变量 $holiday 并回显 id 变量值。
  • 并使用控制器更新您的问题,尤其是更新功能。
  • 您是否为规则创建了一个单独的文件并告诉我他更新规则是如何与您的更新功能相关联的?
猜你喜欢
  • 1970-01-01
  • 2020-03-01
  • 2018-11-09
  • 2020-12-25
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
相关资源
最近更新 更多