如何在Laravel中验证数组中对的唯一性?

时间:2020-03-26 22:46:57

标签: laravel validation

我正在为关税实体的Laravel应用开发CRUD。 关税表目前具有这样的结构:

--------------------------
|id | name | hint | price|
--------------------------

我还与关税中包含的服务有多对多关系。 绑定表结构为:

----------------------------------------------
| id | tariff_id | service_id | type | value |
----------------------------------------------

在数据库级别, tariff_id和service_id 对是唯一的(特定关税不能具有2个相同的服务:(1-1)和(1-1))。

我制作了vue表组件,用于向tarrifs添加服务,并尝试使用laravel验证规则来验证这种情况。

这是我从表组件获得的FormRequest数据

"id" => 3,
"services" => array:2 [▼
    0 => array:3 [▼
      "service_id" => "2"
      "duration_type" => "0"
      "duration_value" => "1"
    ]
    1 => array:3 [▼
      "service_id" => "3"
      "duration_type" => "0"
      "duration_value" => "2"
    ]
]

我对服务的验证规则是:

'services' => 'required|array',
    'services.*.service_id' => [
    'required',
    'string'
    ],
    'services.*.duration_type' => 'integer|min:0|max:1',
    'services.*.duration_value' => 'required|string',

问题是:如何检查当前service_id和riff_id的唯一性? 我的意思是,当我写类似'services。*。service_id'的东西时,它正在某种程度上遍历我的数据数组,因此我需要将当前迭代的service_id与riff_id进行比较。

如果有人可以在这种情况下为我提供帮助,将感到很高兴,Mayber还有另一种方法可以使它工作。 为了防止用户插入非唯一数据,我在控制器中放置了catch块,当MySQL错误发生时,控制器会触发警报。它正在工作,但感觉很麻烦。

1 个答案:

答案 0 :(得分:1)

您尝试使用the validation rule unique吗?像

'services.*.service_id' => [ 'required', 'string', 'unique:tariff_services,service_id' ]

其中riff_services是数据透视表的名称?