laravel 中的唯一字段验证问题
Posted
技术标签:
【中文标题】laravel 中的唯一字段验证问题【英文标题】:Unique field validation issue in laravel 【发布时间】:2020-08-02 11:54:21 【问题描述】:我正在尝试验证我的 laravel 应用中的唯一条目
以下是我的验证数组,
$website = $websiteModel->find($id);
$this->validate($request, [
'subDomainName' => ['required','regex:/^[A-Za-z0-9 ]+$/'],
'subDomainSuffix' => ['required'],
'packageType' => ['required'],
'themeid' => ['required'],
'lang' => ['required'],
'user' => ['required'],
'domain' => [
'required',
'string',
'min:2',
'max:255',
Rule::unique('apps')->ignore($website)
],
], $request->all());
我的验证工作正常但是,
当我尝试为我的域字段输入重复值时,它得到正确验证但未显示错误消息,说对不起名称已经存在...
<input type="text" id="domain" class="form-control" name="domain" >
!! $errors->first('domain', '<span class="help-block" role="alert">:message</span>') !!
在此范围内,它只显示常见错误消息区域,但它显示对不起表单无法更新...那么我怎样才能正确验证该字段并显示相关错误消息
【问题讨论】:
【参考方案1】:做这样的事情:
在插入请求时使用
'domain' => [
...
'unique:websites,domain'
]
根据更新请求使用
'domain' => [
...
"unique:websites,domain,$this->website->id"
]
或者
'domain' => [
...
Rule::unique('websites', 'domain')->ignore($this->website)
]
【讨论】:
对你的答案做了一个小改动,在更新行中,你的代码给了我一个错误,所以我把它改成了 Rule::unique('apps', 'domain')->ignore($网站),这对我有用。 :)。感谢您的指导。【参考方案2】:您将 $request->all() 作为验证消息传递。 请尝试:
$website = $websiteModel->find($id);
$request->validate([
'subDomainName' => ['required','regex:/^[A-Za-z0-9 ]+$/'],
'subDomainSuffix' => ['required'],
'packageType' => ['required'],
'themeid' => ['required'],
'lang' => ['required'],
'user' => ['required'],
'domain' => [
'required',
'string',
'min:2',
'max:255',
Rule::unique('apps')->ignore($website)
],
]);
【讨论】:
【参考方案3】:你不需要在忽略规则中传递重复的列来指示验证器忽略网站域,除了它自己吗?比如像
Rule::unique('apps')->ignore($website->id)
【讨论】:
【参考方案4】:请试试这个。它有助于解决您的问题
在文件顶部使用异常和验证器
use Exception;
use Validator;
$rules = [
'subDomainName' => 'required|unique:sub_domain_name',
];
$validator = Validator::make($request->all(), $rules, $message);
if ($validator->fails())
throw new Exception(implode('\n', $validator->errors()->all()));
sub_domain_name : 这是数据库列名
【讨论】:
以上是关于laravel 中的唯一字段验证问题的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.7 具有 JSON 字段类型的存在/唯一验证