方法 Illuminate\Database\Eloquent\Collection::save 不存在

Posted

技术标签:

【中文标题】方法 Illuminate\\Database\\Eloquent\\Collection::save 不存在【英文标题】:Method Illuminate\Database\Eloquent\Collection::save does not exist方法 Illuminate\Database\Eloquent\Collection::save 不存在 【发布时间】:2021-09-08 14:20:48 【问题描述】:

更新数据库时遇到问题

错误:方法 Illuminate\Database\Eloquent\Collection::save 不存在。

控制器:

 public function actualizar(Request $request)
    
    $nuevoIngreso = \App\Models\Servicio::all();
    $nuevoIngreso->costo = $request->costo;
    $nuevoIngreso->duracion = $request->duracion;
    $nuevoIngreso->mantenimiento = $request->mantenimiento;
    $nuevoIngreso->save();
    return redirect('servicios')->with('mensaje', 'Ficha Actualizada.');


blade.php

         <form method="POST" action=" route('actualizar') ">
                method_field('PUT')
@csrf

                    @foreach ($servicios as $costo)
<h1 class="text-center text-primary">  $costo->tipo </h1>
                  <div class="form-group row">
                    <label for="example-text-input" class="col-md-2 col-form-label form-control-label">Costo</label>
                    <div class="col-md-10">
                      <input class="form-control" type="text" value="$costo->costo">
                
                    </div>
                    <label for="example-text-input" class="col-md-2 col-form-label form-control-label">Duración</label>
                    <div class="col-md-10">
                      <input class="form-control" type="text" value="$costo->duracion" id="example-text-input">
                    </div>
                    <label for="example-text-input" class="col-md-2 col-form-label form-control-label">Mantenimiento</label>
                    <div class="col-md-10">
                      <input class="form-control" type="text" value="$costo->mantenimiento" id="example-text-input">
                    </div>
                  </div>
                 <hr>
               @endforeach

               <button type="submit" class="btn btn-success float-right" float-rightdata-toggle="sweet-alert" data-sweet-alert="success">SAVE</button>
                </form>

请帮忙

【问题讨论】:

【参考方案1】:

错误很明显。你正在调用静态方法all()。所以它应该是

  $nuevoIngreso =new \App\Models\Servicio();
    $nuevoIngreso->costo = $request->costo;
    $nuevoIngreso->duracion = $request->duracion;
    $nuevoIngreso->mantenimiento = $request->mantenimiento;
    $nuevoIngreso->save();

因此,如果您正在考虑更新特定记录,请按 id 或任何列查找

 $nuevoIngreso =new \App\Models\Servicio::find($id);
        $nuevoIngreso->costo = $request->costo;
        $nuevoIngreso->duracion = $request->duracion;
        $nuevoIngreso->mantenimiento = $request->mantenimiento;
        $nuevoIngreso->save();

更新

<form method="POST" action=" route('actualizar') ">
    method_field('PUT')
    @csrf

    @foreach ($servicios as $key=>$costo)
        <h1 class="text-center text-primary">  $costo->tipo </h1>
        <input class="form-control" type="hidden" value="$costo->id" name="service[$key][id]">
        <div class="form-group row">
            <label for="example-text-input" class="col-md-2 col-form-label form-control-label">Costo</label>
            <div class="col-md-10">
                <input class="form-control" type="text" value="$costo->costo" name="service[$key][costo]">

            </div>
            <label for="example-text-input" class="col-md-2 col-form-label form-control-label">Duración</label>
            <div class="col-md-10">
                <input class="form-control" type="text" value="$costo->duracion" id="example-text-input" name="service[$key][duracion]">
            </div>
            <label for="example-text-input" class="col-md-2 col-form-label form-control-label">Mantenimiento</label>
            <div class="col-md-10">
                <input class="form-control" type="text" value="$costo->mantenimiento" id="example-text-input" name="service[$key][mantenimiento]">
            </div>
        </div>
        <hr>
    @endforeach

    <button type="submit" class="btn btn-success float-right" float-rightdata-toggle="sweet-alert" data-sweet-alert="success">SAVE</button>
</form>

然后在控制器中

foreach($request->service as $key=>$value)

 $nuevoIngreso =new \App\Models\Servicio::find($value['id']);
 if($nuevoIngreso)
 $nuevoIngreso->costo = $value['costo'];
 $nuevoIngreso->duracion = $value['duracion'];
 $nuevoIngreso->mantenimiento = $value['mantenimiento'];
 $nuevoIngreso->save();
 

【讨论】:

如果我没有列 ID 我无法更新? @jererosas .. 如果您正在创建新的 Servicio,那么您可以使用第一个或者通过 id 查找,或者您必须提及您需要保存数据的 coumn base。您能告诉我您到底是什么想用那个方法做 是全部记录还是特别。如果特别需要检查什么条件 什么错误。也在循环之前尝试 dd($request->all()) 并发布它 你能 dd($request->all())

以上是关于方法 Illuminate\Database\Eloquent\Collection::save 不存在的主要内容,如果未能解决你的问题,请参考以下文章

静态方法与实例方法,类方法与对象方法

init()方法和构造方法的区别

GroovyGroovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )

Python中静态方法和类方法的区别

类方法和实例方法

Java中的构造方法与普通方法的区别? 啥情况下用构造方法啥情况下用普通的方法