我有一个输入字段,可在其工作时将名称插入数据库,就像我每次输入一个要插入的名称一样,并且不允许重复该名称,但我想输入多个名称时要用逗号分隔,这是我拥有的si时刻
前端
<form method="POST" action="{{route('store.names')}}">
@csrf
<div class="form-group row">
<label for="names"
class="col-md-4 col-form-label text-md-right">Add New Name
</label>
<div class="col-md-6">
<input id="names" type="text"
class="form-control @error('names') is-invalid @enderror" name="names"
value="{{ old('names') }}" autocomplete="names" autofocus>
@error('names')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
Add Names
</button>
</div>
</div>
</form>
控制器
public function store(Request $request)
{
$validation = Names::create($this->validateRequest());
return back()->with('message','Added'));
}
private function validateRequest()
{
return request()->validate([
'names' => 'required|min:2|unique:Names',
]);
}
这样做是一次插入一个人的名字,我该如何插入多个人,并用逗号分隔并完整保留验证
我认为它必须像这样
$searchString = ',';
if( strpos($request->names;, $searchString) !== false )
{
// insert in to db separately
}else{
$names= Names::create($this->validateRequest());
}
答案 0 :(得分:0)
您可以覆盖prepareForValidation
来预处理数据。在这种情况下,它将用分隔符分割字符串。然后,您可以使用rules
方法或您自己的显式验证调用来应用数组验证。
protected function prepareForValidation() {
$this->replace(['names' => explode(',', $this->names)]);
}
public function rules() {
return [
'name' => 'required|min:2|unique:Names',
'names.*' => 'name'
];
}
答案 1 :(得分:0)
您可以使用explode()PHP函数将输入字段给出的字符串拆分为一个数组。该数组将为您提供更大的灵活性来存储多个名称。
示例:
explode(", ", "peter, jhon, pete");
将其修改为您的代码,就可以了!
有关explode()函数的更多信息,您可以阅读PHP文档:https://www.php.net/manual/en/function.explode.php