php - Laravel 多值验证需要一个
问题描述
我的表中有 3 列;admin_id、server_id 和 client_id。只有一个是必需的。例如,如果我发送 admin_id,则不需要 server_id 和 client_id。或者,如果我发送 server_id,则不需要 client_id 和 admin_id。但我不能将它们全部发送空。我也不能同时发送 client_id 和 admin_id 或其他可能性。我只需要发送其中一个。
我该如何验证?
$rules = [
'admin_id' => 'required|exists:admins,id',
'server_id ' => 'required|exists:servers,id',
'client_id ' => 'required|exists:clients,id'
];
如果我喜欢这个,我必须把它们都寄出去。但我只想 1 必需。
我想检查;
如果 admin_id 和 server_id 为空;client_id 是必需的。
如果 client_id 和 server_id 为空;admin_id 是必需的。
如果 admin_id 和 client_id 为空;server_id 是必需的。
解决方案
您可能需要required_without_all
验证
$rules = [
'admin_id' => 'required_without_all:server_id,client_id|exists:admins,id',
'server_id ' => 'required_without_all:admin_id,client_id|exists:servers,id',
'client_id ' => 'required_without_all:server_id,admin_id|exists:clients,id'
];
required_without_all:foo,bar,...
仅当所有其他指定字段都不存在时,验证中的字段必须存在且不为空。
推荐阅读
- sql - 如何处理 CASE WHEN SQL 语句中不存在的记录?
- c++ - 在 Visual Studio 2017 的 CMake 项目中使用库
- java-8 - 在并行流中窥视以增加计数器
- git - git合并时重复代码(自动合并)
- xcode - Xcode 集成需要防火墙端口转发?
- sql - 带有 in group by 子句或 partition by 的 case 语句
- ssl - Mirth connect 3.6开源是否支持HTTP而不使用SSL管理器
- c# - How can you wait on AppDomain to process async callback in C# and then return the results?
- azure - 无所有权的 Azure 云全面运营管理
- javascript - 在最后一个子jQuery之前插入