【问题标题】:How to update in Laravel如何在 Laravel 中更新
【发布时间】:2019-03-24 03:06:28
【问题描述】:

在我的 Laravel 应用程序中实施更新时遇到了一些问题。 在我的刀片文件中,我有一个模式,在其中显示 .每一行作为一个按钮,打开另一个模式,每个字段都应该更新。所以这是刀片文件:

<form action="{{ action('AnamController@update', $par->id_par) }}" method="put" class="form-horizontal">
    {{csrf_field()}}
    <input name="input_name" value="Par" hidden />

    <div class="col-lg-12">
        <div class="form-group">
            <label class="control-label col-lg-4">Name:</label>
            <div class="col-lg-6">
                <input id="name" name="name" type="text" class="form-control" value="{{$par->name}}"/>
            </div>
        </div>
    </div>
    <!--other things-->
</form>

但这返回给我一个错误。 “此集合实例上不存在属性 [id_par]”,如果我在按下按钮编辑以打开模式时插入一个 foreach 语句,我总是会看到数据库中存在的第一个字段。那我该怎么办?

谢谢

编辑 这是路线:

Route::post('/anam/{id}, AnamController@update')->name('anam');

编辑 2 我尝试实现更新功能以查看更新是否有效。但我有错误 MethodNotAllowedHttpException

这是我写的:

   public function update(Request $request, $id){

    $par = Par::find($id);
    $par->name = $request->input('name');
    $par->save();

    return redirect('/anam');
}

【问题讨论】:

  • 尝试将$par-&gt;id_par 更改为数据库中存在的静态id,然后告诉我您的更新是否有效
  • 将表单方法put改为post

标签: php laravel


【解决方案1】:

首先要进行更新,您需要将 form 元素方法更改为 post,然后在表单中添加刀片指令 @method('put') 用于较新的 laravel 版本或 {{ method_field('PUT') }} 用于表单中的较旧版本。

请分享更多代码,而不仅仅是视图,以便我们了解导致您收到错误的原因。

【讨论】:

  • 是的,我已经尝试将帖子写入
    中的方法属性,但这并不能解决我的问题。所以我会尝试改变它,但没有任何成功。
  • 您的路线应该是put 而不是post。但我很想看看你如何传递这个$par 变量以及它包含什么。因为这就是错误的来源。
  • 我会以这种方式在我的控制器的索引函数中传递它 $par = Par::where('id_pazi', Auth::id())->get();然后我将变量放在视图函数中。
  • $par = Par::where('id_pazi', Auth::id())-&gt;get(); 更改为 $par = Par::where('id_pazi', Auth::id())-&gt;first();
  • 如果我将 get() 更改为 first() 我有一个错误:“尝试获取非对象的属性 'id_par'”
【解决方案2】:

你的路线必须是这样的:

Route::put('/anam/{id}, AnamController@update')-&gt;name('anam');

不是

Route::post('/anam/{id}, AnamController@update')-&gt;name('anam');

在你的表单中使用这个

<form action="{{ action('AnamController@update', $par->id_par) }}" method="POST" class="form-horizontal">
{{csrf_field()}}
{{ method_field('PUT') }}

编辑:

您的主键名称可能有问题:

Par 模型的主键是 id_par 吗?

在您的控制台中检查请求是否在正确的 id 上(例如:/aname/10)

然后尝试在您的控制器中添加一个dd($id); 以查看您拥有的 id 是否正确。

PS:您应该尝试使用自动模型绑定的资源控制器

https://laravel.com/docs/5.7/routing#implicit-binding

【讨论】:

  • 更新功能有效,但仍然存在问题,在模态中我总是在 db 中看到我的表的第一行。
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2017-06-10
  • 2014-07-15
  • 2016-10-20
  • 1970-01-01
相关资源
最近更新 更多