【问题标题】:Laravel validate if same item is selected more than onceLaravel 验证是否多次选择相同的项目
【发布时间】:2020-10-15 12:43:47
【问题描述】:

在我的应用程序中,我为选定的多个 devices 提供了 add more 功能。如果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;
    }
}

【问题讨论】:

  • 我想确认一下,您是从数据库中还是从当前请求中检查重复的设备?
  • 来自当前请求,而不是来自数据库。

标签: laravel validation customization


【解决方案1】:

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

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

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

【讨论】:

  • 成功了。但是,我需要检查 device_id 而不是 device_company_id (在循环中)是否不同。此外,我发现distinct 规则也必须在循环中定义才能正常工作。我也会发布我的最终代码。
  • 应该早点回复,但是周末什么的。总之干得好!
【解决方案2】:

感谢@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;
    }
}

我也发现了这个Laravel array validation for unique attribute in array but not required to be unique in table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多