我正在为关税实体的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错误发生时,控制器会触发警报。它正在工作,但感觉很麻烦。
答案 0 :(得分:1)
您尝试使用the validation rule unique吗?像
'services.*.service_id' => [ 'required', 'string', 'unique:tariff_services,service_id' ]
其中riff_services是数据透视表的名称?