数组验证:多列的唯一验证

时间:2021-06-29 09:34:01

标签: laravel validation controller unique-constraint

我正在尝试检查三列 unique validation,employee_id,designation_id 上的 station_id,但数据以 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就没有问题。非常感谢任何帮助/建议/指南。提前致谢。

1 个答案:

答案 0 :(得分:0)

你可以通过创建一个规则来做到这一点,即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;
}

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