【问题标题】:Array Validation: unique validation on multiple columns数组验证:多列的唯一验证
【发布时间】:2021-09-11 12:15:08
【问题描述】:

我正在尝试在 employee_iddesignation_idstation_id 的三列​​上检查 unique validation,但数据以 array 的形式出现,这使我的情况独一无二,与其他 SO 问题/答案不同。我已经检查了如下几个问题:checks unique validation on multiple columns

但就我而言,我无法获取值,因为它们位于数组中。我也尝试实现Custom RuleRequest,但徒劳无功。对于所有的尝试,我都没有得到field value,例如$request->employee_id,因为它们在我的情况下是array。可能是我尝试的不对。

控制器代码:

    $this->validate($request, [
        'posting.*.employee_id' => 'required,unique: // what to do here ??',
        'posting.*.designation_id' => 'required',
        'posting.*.station_id' => 'required',
        'posting.*.from_date' => 'required|date',
    ]);

我正在尝试验证 createupdate (along with ignore $this->id facility) 的唯一性,但不知道如何在此处为数组实现它。没有array也没问题。非常感谢任何帮助/建议/指南。提前致谢。

【问题讨论】:

    标签: laravel validation controller unique-constraint


    【解决方案1】:

    你可以通过创建一个规则来做到这一点,即 UniquePosting,这样你的控制器代码就会看起来像

    $this->validate($request, [
        'posting' => ['required'],
        'posting.*' => ['required', new UniquePosting()],
        'posting.*.employee_id' => 'required',
        'posting.*.designation_id' => 'required',
        'posting.*.station_id' => 'required',
        'posting.*.from_date' => 'required|date',
    ]);
    

    现在你的 UniquePosting 规则传递函数看起来像

    public function passes($attribute, $value) {
        $exists = Posting::where(['employee_id' => $value['employee_id'], 'designation_id' => $value['designation_id'],'station_id' => $value['station_id')->exists();
     return !$exists;
    }
    

    如果需要,添加任何更改,总体而言,这是测试整个数组唯一性的概念。

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 2014-08-25
      • 2014-08-08
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2011-11-17
      相关资源
      最近更新 更多