Php 使用foreach循环更新/编辑Laravel
我试图更新我的表,但无法使其正常工作。。我总是以错误告终: 为foreach()提供的参数无效 这是我的控制器:Php 使用foreach循环更新/编辑Laravel,php,mysql,laravel,Php,Mysql,Laravel,我试图更新我的表,但无法使其正常工作。。我总是以错误告终: 为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 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');
这是我的表格,我正在尝试循环更新的分数:
使用Score::find($id)
您只会返回一个结果,因此不会有任何结果需要处理
如果只想更新表中的一行,则不需要对其进行foreach
你可以直接跑
$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()代码>
这将返回表中的每一行。使用Score::find($id)
您将只返回一个结果,这样就不会有任何可重复的内容
如果只想更新表中的一行,则不需要对其进行foreach
你可以直接跑
$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()代码>
这将返回表中的每一行。从聊天讨论中发现,您希望更新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
从聊天讨论中发现,您希望更新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
Score::find($id)代码>查找一个项目/行,您在这里尝试循环什么?我正在尝试循环Jan_ap和Jan_hm更新它们,$datas声明在哪里?$scores=Score::find($id);返回1个object right?wwait并查看我的表i更新我的问题Score::find($id)代码>查找一个项目/行,您在这里尝试循环什么?我正在尝试循环Jan_ap和Jan_hm更新它们,$datas声明在哪里?$scores=Score::find($id);返回1个对象,对吗?等待并查看我的表格我更新我的问题关于多行示例两个学生,然后您需要将您的查找机会转换为get();我还需要for each循环吗?是的,如果您返回多行。旁注:如果您将数组/数组表传递给find
您将获得一个集合关于多行示例两个学生,那么您需要将您的查找机会传递给get();是否仍需要for each循环?如果返回多行,则需要。旁注:如果将数组/数组表传递给find
,则将获得一个集合