我正在为Tariff实体的Laravel应用程序开发CRUD。关税表目前有这样的结构:
--------------------------
|id | name | hint | price|
--------------------------
我还与包含在关税中的服务有很多对很多的关系。绑定表结构为:
----------------------------------------------
| id | tariff_id | service_id | type | value |
----------------------------------------------
在tariff_id&service_id是唯一的(特定资费不能有两个相同的服务:(1-1(&(1-1((。
我制作了vue-table组件,用于向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&tariff_id我的意思是,当我写类似的services.*.service_id'的东西时,它会以某种方式在我的数据数组中迭代,所以我需要将当前迭代的service_id与tariff_id进行比较。
如果有人能帮我解决这种情况,我会很高兴,也许还有另一种方法可以让它发挥作用。为了防止用户插入非唯一数据,我在控制器中放入try-catch块&当MySQL发生错误时,控制器会发出警报。它在工作,但感觉很笨重。
您是否尝试使用唯一验证规则?类似的东西
'services.*.service_id' => [ 'required', 'string', 'unique:tariff_services,service_id' ]
其中tariff_services是数据透视表的名称?