从Laravel 5中的动态表单中将多行保存到数据库

Jac*_*ham 4 php jquery laravel eloquent laravel-5

我正在使用jQuery生成两个动态字段.每对字段都显示在页面上,可以有多个实例.在提交(不是ajax)时,每对字段都会保存到自己的表行中Auth::id().

HTML代码中有两种形式,输入两个值,用户单击"添加链接",然后jQuery创建两个隐藏字段(这些是提交的字段),输入的数据在视觉上显示(附加)#link-list.原始字段变空,该过程可以重复...

我正在努力创建一个由eloquent识别的数组,以多次保存数据.

我得到错误'未定义的索引:链接'或第二个输入行在jQuery中的任何一个.

刀片/ 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() !!}
Run Code Online (Sandbox Code Playgroud)

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('');
});
Run Code Online (Sandbox Code Playgroud)

控制器:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*aar 8

一个问题是你的JavaScript元素名称:

<input type="hidden" name="rows[][link]" value="' + link + '">
<input type="hidden" name="rows[][store]" value="' + store + '">
Run Code Online (Sandbox Code Playgroud)

这会产生$rows如下:

[
    0 => ["link" => "foo"], 
    1 => ["store" => "bar"]
]
Run Code Online (Sandbox Code Playgroud)

但是你的PHP代码$rows应该像:

[
    0 => [
        "link" => "foo",
        "store" => "bar"
    ], 
    1 => [
        "link" => "foo",
        "store" => "bar"
    ]
]
Run Code Online (Sandbox Code Playgroud)

生成期望值的一种方法是在元素中指定行键:

<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 + '">
Run Code Online (Sandbox Code Playgroud)

显然,根据您提供的代码,这有点棘手,所以如果您需要帮助,请告诉我.