我的应用程序有一个表单,我在其中插入多条记录,每条记录都是一个新表单。我想验证每个字段在每个形式我试图使用验证功能,但我很困惑如何做多个记录插入?我用的是laravel 5.2。
存储多次插入的函数
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
**更新:**在视图中,您会注意到有一个按钮,当用户单击“添加新”时,它会添加新的行行我要验证所有行,每行包含一条记录。
5条答案
按热度按时间sqyvllje1#
我认为你可以这样做来验证你的数组输入。
https://laravel.com/docs/5.2/validation#validating-arrays
所以在你的情况下:
ozxc1zmp2#
Laravel 5.2附带了一系列现成的特性,对于数组验证,您可以查看Validating Arrays
在你的情况下,你应该尝试:
其他解决方案:
以上解决方案是最完美的,也是最新的一个,特别是针对Laravel 5.2用户。你也可以试试
之后,使用Validator
each
方法将定义的规则应用于数组的每个元素。trnvg8h33#
表单输入数组使事情变得有点复杂。你在不同的层面上犯了错误:
尝试以下方法作为起点。我没有时间来测试这一切,但它遵循的逻辑,我已经成功地使用了很多次。
视图
store()
8gsdolmq4#
试试这个:)
wz8daaqr5#
对于多记录验证,使用记录号自定义消息