Laravel中如何在唯一邮箱验证时忽略指定例外邮箱?
Laravel邮箱唯一验证忽略指定邮箱解决方案
你之前尝试的字符串式unique规则写法无效,因为Laravel的unique规则字符串语法仅支持排除单个记录(按ID),要排除多个指定邮箱,需用以下方法:
方法一:使用Rule类的whereNotIn条件
适用于Laravel 5.5及以上版本,通过Rule类构建带条件的唯一验证规则:
use Illuminate\Validation\Rule; // 定义需要忽略的邮箱数组 $ignoredEmails = ['xxx@xxxx.com', 'yyyy@yyy.com']; // 构建验证规则 $validator = Validator::make($request->all(), [ 'email' => [ 'required', 'email', Rule::unique('users')->whereNotIn('email', $ignoredEmails) ], ]);
方法二:在表单请求类中使用
如果是用表单请求类(比如注册请求RegisterRequest),可以直接在rules方法中编写:
use Illuminate\Validation\Rule; class RegisterRequest extends FormRequest { public function rules() { $ignoredEmails = ['xxx@xxxx.com', 'yyyy@yyy.com']; return [ 'email' => [ 'required', 'email', Rule::unique('users')->whereNotIn('email', $ignoredEmails) ], ]; } }
原理:whereNotIn会给unique验证添加额外的查询条件,让验证时自动排除数组中指定的邮箱,即使这些邮箱已存在于users表中,也不会判定为重复。
内容的提问来源于stack exchange,提问作者Shivangi rawat
相关产品推荐
相关产品推荐

