Laravel 验证是否多次选择同一项目

Laravel validate if same item is selected more than once

在我的应用程序中,我有 add more 选定多个 devices 的功能。如果 user 选择相同的 device 两次或更多次,我需要显示一条错误消息。

这是我的代码。

class ValidateDeviceRequest extends FormRequest
{
    private $data = [];

    public function __construct()
    {
        $this->data = request()->all();
    }

    public function rules()
    {
        $rules = [
            'devices' => ['required', 'array'],
            'devices.*.device_company_id' => [
                'required', 
                'integer', 
                'exists:device_companies,id,company_id,' . session()->get('COMPANY_ID')
            ],
        ];

        foreach($this->data['devices'] as $key => $array)
        {
            $rules["devices.{$key}.device_id"] = [
                'required',
                'integer',
                "exists:devices,id,device_company_id," . @$array["device_company_id"]
            ];
        }

        # returning
        return $rules;
    }
}

如果您只是检查数组中的重复值。您可以为此使用验证规则 distinct

'devices.*.device_company_id' => [
    'distinct',
    // ...
]

如果您希望验证模型中的重复项,您可以使用规则 unique:model

感谢@Tommie。这是我的最终代码。

class ValidateDeviceRequest extends FormRequest
{
    private $data = [];

    public function __construct()
    {
        $this->data = request()->all();
    }

    public function rules()
    {
        $rules = [
            'devices' => ['required', 'array'],
            'devices.*.device_company_id' => [
                'required', 
                'integer', 
                'exists:device_companies,id,company_id,' . session()->get('COMPANY_ID')
            ],
            'devices.*.device_company_id' => [
                'required',
                'distinct',
            ]
        ];

        foreach($this->data['devices'] as $key => $array)
        {
            $rules["devices.{$key}.device_id"] = [
                'required',
                'distinct',
                'integer',
                "exists:devices,id,device_company_id," . @$array["device_company_id"]
            ];
        }

        # returning
        return $rules;
    }
}

我也找到了这个