我在laravel 5.1中遇到问题,插入了多个输入介绍DB。
我为多个输入构建一个查询代码,之后我将它们发送给控制器,但我有一个问题要将它插入到数据库中
如果结果如下所示,我如何将输入插入db:
{"_token":"C6m83bcZKaQsOtRiYEKxJAzzZjvdLerl9QpsvSSs","client_id":["aJQsijwqFVG9r0","aJQsijwqFVG9r0"],"short":["4","11"],"url":["567567567567","3453434534"]}
代码:
HTML:
<form class="js-validation-material form-horizontal push-10-t" action="{!! url() !!}/addreg" method="post">
{!! csrf_field() !!}
<div class="form-group">
<div id="buildyourform"></div>
</div>
<div class="form-group">
<div class="col-xs-12">
<button class="btn btn-sm btn-primary" type="submit">Submit</button>
</div>
</div>
</form>
<script>
$(document).ready(function() {
$("#add").click(function() {
var intId = $("#buildyourform div.form").length + 1;
var fieldWrapper = $("<div class=\"form col-sm-6 col-lg-6\" id=\"field" + intId + "\"><div class=\"form-material\">");
var client_id = $("<input type=\"hidden\" name=\"client_id[]\" value=\"{!! $task->client_id !!}\" class=\"form-control\" />");
var langname = $("<select type=\"text\" name=\"short[]\" class=\"form-control\">{!! $data['langs'] !!}</select>");
var url = $("<input type=\"text\" name=\"url[]\" class=\"form-control\" placeholder=\"Insert a url..\" />");
var label = ("<label for=\"date\"><h3 class=\"block-title\">Lang" + intId + "</h3></label>");
var removeButton = $("<button class=\"btn btn-danger btn-xs push-5-r push-10\" type=\"button\"><i class=\"fa fa-times\"></i></button>");
removeButton.click(function() {
$(this).parent().remove();
});
$("#buildyourform").append(fieldWrapper);
$("#field" + intId + " .form-material").append(client_id,langname,url,removeButton,label);
});
});
</script>
结果需要在DB中:
DB::table('table')->insert([
['client_id' => $request->client_id],
['short' => $request->short],
['url' => $request->url],
]);
每个输入。
答案 0 :(得分:2)
问题是你发送的是具有相同名称的多个输入,所以它只能得到最后一个。
每次你这样做&#34;添加&#34;尝试用类(例如:&#34; foo&#34;)将它们包装在div中。所以你会得到一些&#34; foo&#34;的div。
创建一个名为&#34; items&#34;
的隐藏输入{{ Form::hidden('items') }}
接下来,您必须覆盖提交按钮的点击功能:
$('#submit-form').click(function(e){
a = {};
$.each($('.foo'), function(k,v){
a[k] = $(v).find(':input').serializeArray()
});
$('input[name="items"]').val(JSON.stringify(a));
$('#form').submit()
}
在控制器中:
$items = json_decode(Input::get('items'), true);
然后你有一个包含所有输入的数组。