【问题标题】:Updating multiple records using Laravel 5.3 model binding使用 Laravel 5.3 模型绑定更新多条记录
【发布时间】:2017-09-03 09:30:35
【问题描述】:

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

现在,我可以更改 2 个或 10 个或全部 26 个字段并点击更新按钮。我想更新所有记录。现在,我不知道 $id 在这里如何工作?通常我更新单个记录并且我有 $id ,我只能找到并更新该字段。 但这里不是这样。我正在提取 13 条记录(或 26 个字段)。 13 个字段_1 和 13 个字段_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>

表单快照

【问题讨论】:

    标签: php mysql laravel laravel-5.3


    【解决方案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'
        ];
    }
    

    这是未经测试的,是展示该概念的示例

    【讨论】:

    • 是否仍然可以绑定,即显示数据库中以前的值是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2020-11-13
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    相关资源
    最近更新 更多