如何实现表单字段在两张数据表中的唯一性验证?
问题:Laravel验证中让mobile字段同时在两个表指定列保持唯一
我尝试用以下代码验证用户请求:
$data = $request->validate([ 'fname' => 'nullable', 'lname' => 'nullable', 'gender' => 'required', 'mobile' => 'required|unique:users,usr_name', 'ncode' => 'nullable', 'password' => 'required', 'password_confirmation' => 'required', ]);
目前已经设置mobile字段需满足unique:users,usr_name(即users表的usr_name列唯一),但还需要验证该字段在members表的mbr_mobile列也保持唯一(对应规则unique:members,mbr_mobile),请问如何将这两个规则合并使用?
解答
直接在mobile字段的验证规则中追加第二个unique规则即可,Laravel支持多种方式组合验证规则,以下是两种常用实现:
方式一:竖线分隔合并规则
这是Laravel验证规则的常规写法,用竖线|串联多个规则:
$data = $request->validate([ 'fname' => 'nullable', 'lname' => 'nullable', 'gender' => 'required', 'mobile' => 'required|unique:users,usr_name|unique:members,mbr_mobile', 'ncode' => 'nullable', 'password' => 'required', 'password_confirmation' => 'required', ]);
方式二:数组形式定义规则(可读性更强)
当规则数量较多或需要添加额外参数时,数组形式的规则更便于维护:
$data = $request->validate([ 'fname' => 'nullable', 'lname' => 'nullable', 'gender' => 'required', 'mobile' => [ 'required', 'unique:users,usr_name', 'unique:members,mbr_mobile' ], 'ncode' => 'nullable', 'password' => 'required', 'password_confirmation' => 'required', ]);
两种方式的验证逻辑完全一致:先校验mobile字段不为空,接着检查users表的usr_name列是否已存在该值,最后检查members表的mbr_mobile列是否已存在该值,任意一步验证失败都会返回对应的错误提示。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

