Laravel版本:7.x
我已经使用硬编码的有效device_company_id
(与所选设备相关联)测试了该代码,并且工作正常。
表格
device_companies
|- id
|- company_id
|- title
|- ...
devices
|- id
|- device_company_id
|- ...
请求数据
Array
(
...
[devices] => Array
(
[0] => Array
(
[device_company_id] => 1
[device_id] => 2
[device_inventory_id] => null
[amount] =>
[refundable] =>
[description] =>
)
)
)
规则:
...
$rules = array_merge($rules, [
'devices' => [
'required',
'array'
],
'devices.*.device_company_id' => [
'required',
'integer',
'exists:device_companies,id,company_id,' . auth()->user()->id
],
'devices.*.device_id' => [
'required',
'integer',
'exists:devices,id,device_company_id,devices.*.device_company_id'
],
]);
...
我需要一个用于exists
验证程序的自定义验证规则,以验证device
是否实际上属于所选的device_company
。因为我不希望任何人打开检查工具,所以请更改值并导致应用程序出现错误或类似情况。
这里是我找到参考文献https://ericlbarnes.com/2015/04/04/laravel-array-validation/的链接>
我的代码:
... $rules = [ ...other rules ]; $newRules = [ 'devices' => [ 'required', 'array' ], 'devices.*.device_company_id' => [ 'required', 'integer', 'exists:device_companies,id,company_id,' . auth()->user()->id ], ]; foreach($data['devices'] as $key => $array) { $newRules["devices.{$key}.device_id"] = [ 'required', 'integer', "exists:devices,id,device_company_id,{$array["device_company_id"]}", ]; } $rules = array_merge($rules, $newRules); ...
如果有人找到更好的解决方案,请发布您的答案。
希望这对某人有帮助。谢谢:)