我正在使用 jQuery 生成两个动态字段。每对字段都显示在页面上,并且可以有多个实例。在提交时(不是 ajax),每对字段与 Auth::id()
一起保存到它们自己的表行中。
HTML 代码中有两个表单,两个值都已输入,用户单击“添加链接”,然后 jQuery 创建两个隐藏字段(这些是提交的字段)并且输入的数据直观地显示(附加)到 #链接列表
。原来的字段变空了,这个过程可以重复...
我正在努力创建一个被 Eloquent 识别的数组以多次保存数据。
我收到错误“Undefined index: link”或 jQuery 中的第二个输入行。
Blade /HTML:
{!! Form::open(['route' => ['multiple.store'], 'method' => 'post', 'role'=> 'form', 'class' => 'form']) !!}
<ul id="link-list">
<!-- append new rows -->
</ul>
<div id="newlink" class="form-inline">
<div class="form-group">
{!! Form::text('prestore', null, ['placeholder' => 'Store name', 'class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::text('prelink', null, ['placeholder' => 'Link / URL', 'class' => 'form-control']) !!}
</div>
<div class="form-group">
<button class="btn btn-primary submit new-row" type="button">Add store link</button>
</div>
</div>
<br/><br/>
{!! Form::submit('Submit rows', ['class' => 'btn btn-success submit']) !!}
{!! Form::close() !!}
jQuery/JavaScript
$(document).on('click', '.new-row', function() {
var store = $('#newlink input[name=prestore]').val();
var link = $('#newlink input[name=prelink]').val();
console.log(store, link);
$('<li class="not-saved">' +
'<a href="'+link+'">'+store+'</a>' +
'<input type="hidden" name="rows[][link]" value="' + link + '">' +
'<input type="hidden" name="rows[][store]" value="' + store + '">' +
'</li>').appendTo('#link-list').hide().fadeIn(280);
$('input[name=prestore]').val('');
$('input[name=prelink]').val('');
});
Controller :
public function store()
{
$input = Input::all();
foreach ($input['rows'] as $row) {
$items = new Multiple([
'user_id' => Auth::id(),
'store' => $row['store'],
'link' => $row['link'],
]);
$items->save();
}
}
最佳答案
一个问题是你的 JavaScript 元素名称:
<input type="hidden" name="rows[][link]" value="' + link + '">
<input type="hidden" name="rows[][store]" value="' + store + '">
这将生成 $rows
,如下所示:
[
0 => ["link" => "foo"],
1 => ["store" => "bar"]
]
但是您的 PHP 代码希望 $rows
像这样:
[
0 => [
"link" => "foo",
"store" => "bar"
],
1 => [
"link" => "foo",
"store" => "bar"
]
]
生成预期值的一种方法是在元素中指定行键:
<input type="hidden" name="rows[0][link]" value="' + link + '">
<input type="hidden" name="rows[0][store]" value="' + store + '">
<input type="hidden" name="rows[1][link]" value="' + link + '">
<input type="hidden" name="rows[1][store]" value="' + store + '">
显然,鉴于您提供的代码,这有点棘手,所以如果您需要这方面的帮助,请告诉我。
关于php - 从 Laravel 5 中的动态表单将多行保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629082/