我试图更新我的表,但无法使其正常工作。我总是以错误结束:
为foreach()提供的参数无效
这是我的控制人:
public function show_score($id)
{
$scores = Score::with(['lead','subject'])->where(['subject_id'=>$id])->get();
return view('markbook.show_score',compact('scores'));
}
public function update_score(Request $request)
{
$id = $request->input('id');
$scores = Score::find($id);
foreach ($scores as $datas) {
$datas->jan_ap=$request->input('jan_ap');
$datas->jan_hm=$request->input('jan_hm');
$datas->save();
}
}
route:
Route::get('markbook/scores/{id}', 'MarkbookController@show_score' );
Route::post('markbook/scores', 'MarkbookController@update_score');
这是我要循环更新分数的桌子:
Is it possible to cherry-pick a commit from another git repository?
答案 0 :(得分:2)
从聊天讨论中发现,您想要更新多个分数,该分数列在tr,td中。您可以像这样更改它
更改视图
@foreach($scores as $score)
<tr>
<td>{{$score->lead->student_name}} <input type="hidden" name="scores[{{$loop->index}}][id]" value="{{$score->id}}"></td>
<td><input type="text" name="scores[{{$loop->index}}][jan_ap]" value="{{$score->jan_ap}}"></td>
<td><input type="text" name="scores[{{$loop->index}}][jan_hm]" value="{{$score->jan_hm}}"></td>
</tr>
@endforeach
控制器更新得分
public function update_score(Request $request)
{
$scores = $request->input('scores'); //here scores is the input array param
foreach($scores as $row){
$score = Score::find($row['id']);
$score->jan_ap = $row['jan_ap'];
$score->jan_hm = $row['jan_hm'];
$score->save();
}
}
答案 1 :(得分:1)
使用Score::find($id)
只会返回1个结果,因此不会有任何其他内容。
如果您只想更新表中的一行,则无需进行更新。
您可以简单地运行
$score = Score::find($request->input($id));
$score->jan_ap = $request->input('jan_ap');
$score->jan_hm = $request->input('jan_hm');
$score->save();
如果要返回多行,则需要将查找内容更改为get()
所以$scores = Score::where('something', $request->input('something))->get();
如果您要使用相同的信息更新表中的每一行,请执行以下操作:
$scores = Score::all();
这将返回表中的每一行。