【问题标题】:Laravel update/edit using foreach loopLaravel 使用 foreach 循环更新/编辑
【发布时间】:2018-07-12 17:01:17
【问题描述】:

我试图更新我的表,但我无法让它工作。我总是以错误结束:

为 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'); 

这是我正在尝试循环更新分数的表格:

【问题讨论】:

  • Score::find($id); 找到 一个 项/行,你想在这里循环什么?
  • 我正在尝试循环 Jan_ap 和 jan_hm 更新它们
  • $datas 是在哪里声明的?
  • $scores = Score::find($id);返回 1 个对象对吗?
  • 等待,看看我的表我更新我的问题

标签: php mysql laravel


【解决方案1】:

从聊天讨论中发现您要更新多个分数,这些分数在 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(); 
    }
} 

【讨论】:

    【解决方案2】:

    使用Score::find($id),您只会返回 1 个结果,因此不会有任何内容可供查询。

    如果您只想更新表中的单行,则不需要 foreach。

    你可以简单地运行

    $score = Score::find($request->input($id));
    $score->jan_ap = $request->input('jan_ap');
    $score->jan_hm = $request->input('jan_hm');
    $score->save();
    

    如果您想返回多行,您需要将您的 find 更改为 get()

    所以$scores = Score::where('something', $request-&gt;input('something))-&gt;get();

    如果您想使用相同的信息更新表中的每一行,您可以这样做:

    $scores = Score::all();

    这将返回表格中的每一行。

    【讨论】:

    • 如何多行示例两个学生
    • 那么你需要找到一个 get();
    • 我还需要 for each 循环吗?
    • 是的,如果您要返回多行。
    • 旁注:如果您将数组/Arrayable 传递给find,您将获得一个集合
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2018-12-06
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多