如何验证在laravel中的多个记录插入? [英] How to validate multiple records insertion in laravel?

查看:44
本文介绍了如何验证在laravel中的多个记录插入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序有一个插入多个记录的表单,每个记录都是一个新表单.我想验证我尝试使用validate函数的每种形式的每个字段,但是对于为多条记录插入该如何做感到困惑?对于这个项目,我使用的是laravel 5.2.

My app has a form where I insert multiple records, each record is a new form. I want to validate each field in each form I tried to use validate function but I am confused how to do it for multiple records insert ? For this project I am using laravel 5.2.

用于多次插入的存储功能

Store Function For Multiple Insert

public function store(Request $request)
    {
        $this->validate($request,[
            'name' => 'required|min:4',
            'fname' => 'required',
            'rollno' => 'required|unique:students'
        ]);
        $input = $request->all();
        $condition = $input['name'];
        foreach ($condition as $key => $condition) {
            $student = new Student;
            $student->name = $input['name'][$key];
            $student->fname = $input['fname'][$key];
            $student->rollno = $input['rollno'][$key];
            $student->obtainedmarks = $input['obtainedmarks'][$key];
            $student->totalmarks = $input['totalmarks'][$key];
            $student->percentage = $input['percentage'][$key];
            $student->save();
        }
        return Redirect::to('/allresults');

}

查看插入数据

@extends('layouts.app')
@section('content')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

<script type="text/javascript">
    $(function () {
        $('.add').click(function () {
            var n = ($('.resultbody tr').length - 0) + 1;
            var tr = '<tr><td class="no">' + n + '</td>' +
                    '<td><input type="text" class="name form-control" name="name[]" value="{{ old('name') }}"></td>'+
                    '<td><input type="text" class="fname form-control" name="fname[]" value="{{ old('fname') }}"></td>'+
                    '<td><input type="text" class="rollno form-control" name="rollno[]" value="{{ old('rollno') }}"></td>'+
                    '<td><input type="text" class="obtainedmarks form-control" name="obtainedmarks[]" value="{{ old('email') }}"></td>'+
                    '<td><input type="text" class="totalmarks form-control" name="totalmarks[]"></td>'+
                    '<td><input type="text" class="percentage form-control" name="percentage[]"></td>'+
                    '<td><input type="button" class="btn btn-danger delete" value="x"></td></tr>';
            $('.resultbody').append(tr);
        });

        $('.resultbody').delegate('.delete', 'click', function () {
            $(this).parent().parent().remove();
        });

        $('.resultbody').delegate('.obtainedmarks , .totalmarks', 'keyup', function () {
            var tr = $(this).parent().parent();
            var obtainedmarks = tr.find('.obtainedmarks').val() - 0;
            var totalmarks = tr.find('.totalmarks').val() - 0;

            var percentage = (obtainedmarks / totalmarks) * 100;
            tr.find('.percentage').val(percentage);
        });
    });
</script>

<div class="container">
    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <div class="panel panel-default">
                <div class="panel-heading">Add Results</div>
                @if(count($errors) >0 )
                    <ul>
                        @foreach($errors->all() as $error)
                            <li>{{$error}}</li>
                        @endforeach
                    </ul>
                @endif
                <div class="panel-body">
                   <form class="form-horizontal" role="form" method="POST" action="{{ url('/result') }}">
                        {!! csrf_field() !!}
                    <table class="table table-striped">
                            <thead>
                                <tr>
                                    <th>ID</th>
                                    <th>Student Name</th>
                                    <th>Father Name</th>
                                    <th>Roll No</th>
                                    <th>Obtained Marks</th>
                                    <th>Total Marks</th>
                                    <th>%</th>
                                    <th>Delete</th>
                                </tr>
                            </thead>
                            <tbody class="resultbody">
                                <tr>
                                    <td class="no">1</td>
                                    <td>
                                        <input type="text" class="name form-control" name="name[]" value="{{ old('name') }}">
                                    </td>
                                    <td>
                                        <input type="text" class="fname form-control" name="fname[]" value="{{ old('fname') }}">
                                    </td>
                                    <td>
                                        <input type="text" class="rollno form-control" name="rollno[]" value="{{ old('rollno') }}">
                                    </td>
                                    <td>
                                        <input type="text" class="obtainedmarks form-control" name="obtainedmarks[]" value="{{ old('email') }}">
                                    </td>
                                    <td>
                                        <input type="text" class="totalmarks form-control" name="totalmarks[]">
                                    </td>
                                    <td>
                                        <input type="text" class="percentage form-control" name="percentage[]">
                                    </td>
                                    <td>
                                        <input type="button" class="btn btn-danger delete" value="x">
                                    </td>
                                </tr>

                            </tbody>
                        </table>    
                        <center><input type="button" class="btn btn-lg btn-primary add" value="Add New Item">   
                        <input type="submit" class="btn btn-lg btn-default" value="Submit"></center>
                        </form>
                </div>
            </div>
        </div>

    </div><!-- First Row End -->
</div> <!-- Container End -->

@endsection

更新:在视图中,您将看到一个按钮,当用户单击该按钮时,该添加新"会添加新行,我要验证所有行,每行包含一条记录.

Update : In the view you will notice there is a button when the user click on that "add new" it adds new row row I want to validate all the rows, each row contains a record.

推荐答案

Laravel 5.2附带了许多现成的功能,对于数组验证,您可以查看

Laravel 5.2 comes with bundle of ready features, for array validations you can take a look on Validating Arrays

在您的情况下,您应该尝试:

In your case you should try :

   $validator = \Validator::make($request->all(), [
            'name.*' => 'yourRules',
            'fname.*' => 'yourRules',
            'rollno.*' => 'yourRules',
            'obtainedmarks.*' => 'yourRules',
            'totalmarks.*' => 'yourRules'
        ]);

  if($validator->fails()) {
            return back()->withInput()->withErrors($validator->errors());
  }

另一种解决方案:

以上解决方案是完美且最新的解决方案,特别适合Laravel 5.2用户.您也可以尝试

The above solution is perfect and latest one, specially for Laravel 5.2 users. You can also try

$validator = \Validator::make($request->all(), [
    'name' => 'array',
    //and your other rules here
]);

然后,使用Validator each方法将定义的规则应用于数组的每个元素.

After that use Validator each method to apply your defined rules to each element of the array.

$validator->each('name','yourRule');

这篇关于如何验证在laravel中的多个记录插入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆