php - Laravel 框架中的更新正在返回一条新记录
问题描述
我是 PHP 和 Laravel 的新手。我学到了很多东西,但是我在看到我的错误应该是一个简单的任务时遇到了问题。
我有一个从 MySQL 数据库中的数据填充的表单。当我提交它时,它会创建一个新记录而不是更新现有记录。这是我正在使用的表单操作:
<form action="{{route('updateAlert', $alert->id)}}" method="post" name="saveAlert" id="saveAlert" class="needs-validation"
@csrf
@method("PUT")
///form fields here
</form>
这是两条相关的路线。editAlert 将您带到上面的表格。updateAlert 应该将您带到我的 AlertController 上的更新方法。
Route::get('/alerts/edit/{id}', 'AlertController@edit')->name('editAlert');
Route::put('/alerts/edit/{id}', 'AlertController@update')->name('updateAlert');
这是我的 AlertController 的样子:
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Alert $alert)
{
$alert->type = $request->type;
$alert->title = $request->title;
$alert->body = $request->body;
$alert->link = $request->link;
$alert->eff_dt = Carbon::parse($request->eff_dt);
$alert->exp_dt = Carbon::parse($request->exp_dt);
$alert->note = $request->note;
$alert->user_id = auth()->user()->id;
$alert->save();
return redirect()->route('viewAlerts')->with('success', 'Your alert has been updated.');
}
我错过了什么?我在应用程序的另一部分有相同的基本代码,它按预期工作。提前致谢。
解决方案
要更新 Laravel 中的内容,您需要一个查询构建器对象;Alert $alert 返回模型的对象,因此不能用于更新事物。
注意:find 方法是一种特殊方法,其对象可用于更新记录,与“first”方法不同。
因此,您的代码必须更改为:
public function update(Request $request, Alert $alert)
{
$alert = Alert::where('id', $alert->id); // or: Alert::find($alert->id);
$alert->type = $request->type;
$alert->title = $request->title;
$alert->body = $request->body;
$alert->link = $request->link;
$alert->eff_dt = Carbon::parse($request->eff_dt);
$alert->exp_dt = Carbon::parse($request->exp_dt);
$alert->note = $request->note;
$alert->user_id = auth()->user()->id;
$alert->save();
}
推荐阅读
- php - Plesk Laravel 调度程序运行控制台应用程序两次
- gremlin - Janus Graph 使用 GraphJson 导出和导入
- java - 在Spring boot中使用mysql join作为一个java对象返回两个表的数据
- android - 即使应用程序被操作系统杀死,有没有办法将应用程序恢复到“当前活动”?
- c# - 使用循环检查目录中的文件并将文件名上具有相同日期的文件添加到 zip 文件夹
- import - power bi 无数据查看选项;需要先导入
- java - 在 JEE 中 24 小时后从 MySQL 中删除一行?
- html - 如何在不使用样式标签的情况下在 html 表格中赋予边框颜色
- javascript - 在 foreach 循环中使用两个数组值
- flask - 烧瓶中不同类型的用户注册