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

时间:2017-04-07 21:50:48

标签: php mysql laravel laravel-5.3

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

现在,我可能会更改2个或10个或全部26个字段并点击更新按钮。我想更新所有记录。现在,我不知道$ id在这里如何运作?通常我更新单个记录,我有$ id,我可以找到并只更新该字段。 但事实并非如此。我正在拉13条记录(或26个字段)。 13 field_1和13 field_2。如何更新全部?

mycode的

数据库

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>

表单快照

fields snapshot each row is a record from database table

1 个答案:

答案 0 :(得分:1)

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

您可以做的是生成一个数据数组以发布到您的控制器。

例如:

{!! 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'
    ];
}

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