使用 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'
];
}
这是未经测试的,是一个演示概念的示例
我正在从 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'
];
}
这是未经测试的,是一个演示概念的示例