使用验证模型将逗号分隔的值插入数据库

时间:2019-08-29 22:10:06

标签: php database laravel

我有一个输入字段,可在其工作时将名称插入数据库,就像我每次输入一个要插入的名称一样,并且不允许重复该名称,但我想输入多个名称时要用逗号分隔,这是我拥有的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',
        ]);
    }

enter image description here 这样做是一次插入一个人的名字,我该如何插入多个人,并用逗号分隔并完整保留验证

但这就是我需要的 enter image description here

我认为它必须像这样

    $searchString = ',';

    if( strpos($request->names;, $searchString) !== false )
    {
      // insert in to db separately 
    }else{
        $names= Names::create($this->validateRequest());
    }

2 个答案:

答案 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