在Laravel中使用Former一次更新多行


Update multiple rows at once using Former in Laravel

我有一个包含设置列表的表单,所有设置都有自己的id,通过简单的foreach循环显示。当用户单击更新按钮时,我希望能够使用Anahkiasen/Former更新所有值。但是,我似乎找不到关于如何提交多组记录的文档。

例如,如果我打开表单只编辑一个设置而不是所有设置,我只需做以下操作:

{{ Former::open()->method('PUT')->action(URL::to('settings/' . $setting['id'])) }}

这将把它发送到我的'update'资源方法,下面的代码将负责更新:

public function update($id)
{
    $setting = Setting::findOrFail($id);
    if ($setting->save()) {
        return Redirect::back()->with('message', "Setting #$id updated!");
    } else {
        return Redirect::back()->withInput()->withErrors($setting->errors());
    }
}

是否有可能一次对多个记录进行此操作,并且仍然使用方便的$autoHydrateEntityFromInput$forceEntityHydrationFromInput功能?

我使用的是Laravel 4.1和Former 3.4.2.

这必须通过将值放入数组并强制使用Blade模板中的现有值来完成:

@foreach ($settings as $s)
<div class="row">
    {{ Former::text('values[' . $s['id'] . ']', $s['name'])->forceValue($s['value']) }}
</div>
@endforeach

然后检索控制器中的值:

public function update()
{
    $values = Input::get('values');
    foreach ($values as $id => $val) {
        $setting = Setting::findOrFail($id);
        $setting['value'] = $val;
        if (!$setting->save()) {
            return Redirect::back()->withInput()->withErrors($setting->errors());
        }
    }
    return Redirect::back()->with('message', "Settings updated!");
}

这样做,一个标准的资源不会像Route::resource('settings', 'SettingsController');一样工作,所以我不得不简单地做Route::post('settings/update', 'SettingsController@update');

据我所知,自动水合作用在这种情况下也不起作用。