使用 Laravel 5.3 模型绑定更新多条记录

Updating multiple records using Laravel 5.3 model binding

我正在从 MySQL 中提取多条记录并循环模型绑定并用一些数据填充所有输入字段。

现在,我可以更改 2 个或 10 个或全部 26 个字段并点击更新按钮。我想更新所有记录。现在,我不知道 $id 在这里如何工作?通常我更新单个记录并且我有 $id 我只能找到并更新那个字段。 但这里不是这种情况。我正在提取 13 条记录(或 26 个字段)。 13 field_1 和 13 field_2。如何全部更新?

我的代码

数据库

Table
-id
-name
-field1 (updating this one)
-field2 (updating this one)

路线

Route::get('/cat' , 'AdminController@cat');
Route::patch('/cat/{$id}/update','AdminController@cat_update');

控制器

public function cat(){

        $cattfs = Catf::all();
        return view('/cat',compact('cattfs'));
}

public function cat_update(Request $request, $id) // id = 1
{
        $rules = array(
            'field1'              => 'required',
            'field2'              => 'required'
          );

        $validator = Validator::make(Input::all(), $rules);

        if ($validator->fails()) {

             return Redirect()->back()->withErrors($validator);

        } else {

            $cat = Cattf::find($id); //This wont work :/
            $cat ->field1  = Input::get('field1');
            $cat ->field2  = Input::get('field2');
            $cat ->save();

        return redirect('/cat');
        }
}

观看次数

<div class="col-md-6" style="background-color:#fff">

    <table class="table table-hover">
   <thead>
      <tr>
        <th style="text-align: center">Product</th>
        <th style="text-align: center">Pr</th>
        <th style="text-align: center">Co</th>
      </tr>
    </thead>
    <tbody>
     @foreach ($cattos as $catto)
    {!! Form::model($catto,[ 'method' =>'PATCH', 'url' => ['/cat/.$catto->id./update']]) !!}

      <tr>
        <td>{{$catto->name}}</td>
          <td>    {!! Form::text('field1' ,null  ,  ['class'=>'form-control'])  !!}</td>
        <td>      {!! Form::text('field2' ,null  ,  ['class'=>'form-control'])  !!}</td>
      </tr>

      @endforeach

     <td colspan="3">
     {!! Form::submit('UPDATE', ['class'=>'btn btn-primary btn-block']) !!}
      {!! Form::close() !!}
      </td>
      </tr>
    </tbody>
  </table>

  </div>

表格快照

我不认为你可以用模型绑定来做到这一点(如果我错了请纠正我)。

您可以改为生成一个数据数组 post 到您的控制器。

例如:

{!! Form::open(['route' => 'catupdate']) !!}
    @foreach ($cattos as $catto)
        <tr>
            <td>{{$catto->name}}</td>
            <td>{!! Form::text('categories['.$catto->id.'][field1]', null, ['class'=>'form-control']) !!}</td>
            <td>{!! Form::text('categories['.$catto->id.'][field2]', null, ['class'=>'form-control']) !!}</td>
        </tr>
    @endforeach
{!! Form::close() !!}

然后您应该在控制器中收到一个数组,您可以循环并更新每条记录。

public function catupdate()
{
    $categories = request()->input('categories');

    foreach($categories as $id => $values) {
        $cat = Cattf::find($id); 
        $cat->field1 = $values['field1'];
        $cat->field2 = $values['field2'];
        $cat->save();
    }
}

然后您还可以通过在请求文件中执行以下操作来验证数组

public function rules()
{
    return [
        'categories.*.field1' => 'required',
        'categories.*.field2' => 'required'
    ];
}

这是未经测试的,是一个演示概念的示例