如何更新 Laravel 控制器中的数据?
How to update data in Laravel controller?
我正在尝试更新控制器中的模板详细信息。但是目前,我的代码不起作用。它没有更新字段。无论如何,如果我添加 $template->save()。它将更新的记录保存为新记录。如何使我当前的代码工作?为什么我会面临这种情况?请有人向我解释并更正我的代码,我正在学习 Laravel。提前致谢。
TemplateController 中的更新函数
public function update(Request $request, $id)
{
if(! lara_club_has_permission('edit-template') ){
return view('403');
}
$this->validate($request, [
'title'=>'required',
'start_date'=> 'required',
'end_date'=>'required',
'template_content'=>'required',
]
);
//check status response
if(isset($request->status)&&$request->status=='on'){
$status='1';
}else{
$status="0";
}
$template=new Template();
$template->title=$request->title;
$template->start_date=convert_to_sql_date_format($request->start_date);
$template->end_date=convert_to_sql_date_format($request->end_date);
$template->is_active=$status;
$template->template_content=$request->template_content;
$input = $request->all();
$template->update($input);
$name = $input['title'];
return redirect()->route('templates.index')->with('success', 'Template <b>'. $name.'</b> Updated!');
}
您正在创建新对象$template=new Template();
但是你需要更新现有的,所以试试下面的代码
$template=Template::find($id);
//or use $template=Template::where('id',$id)->first();
$template->title=$request->title;
$template->start_date=convert_to_sql_date_format($request->start_date);
$template->end_date=convert_to_sql_date_format($request->end_date);
$template->is_active=$status;
$template->template_content=$request->template_content;
$input = $request->all();
$template->update($input);
您应该使用 Laravel find
方法,而不是声明它的新实例。
应该是
$template=Template::find($id);
没有
$template=new Template();
在我的例子中,我在方法名称中指定了 table 名称,如下所示。
public function update(Request $request, Template $id)
{
$id->title=$request->title;
$id->start_date=convert_to_sql_date_format($request->start_date);
$id->end_date=convert_to_sql_date_format($request->end_date);
$id->is_active=$status;
$id->template_content=$request->template_content;
$input = $request->all();
$id->update($input);
}
我正在尝试更新控制器中的模板详细信息。但是目前,我的代码不起作用。它没有更新字段。无论如何,如果我添加 $template->save()。它将更新的记录保存为新记录。如何使我当前的代码工作?为什么我会面临这种情况?请有人向我解释并更正我的代码,我正在学习 Laravel。提前致谢。
TemplateController 中的更新函数
public function update(Request $request, $id)
{
if(! lara_club_has_permission('edit-template') ){
return view('403');
}
$this->validate($request, [
'title'=>'required',
'start_date'=> 'required',
'end_date'=>'required',
'template_content'=>'required',
]
);
//check status response
if(isset($request->status)&&$request->status=='on'){
$status='1';
}else{
$status="0";
}
$template=new Template();
$template->title=$request->title;
$template->start_date=convert_to_sql_date_format($request->start_date);
$template->end_date=convert_to_sql_date_format($request->end_date);
$template->is_active=$status;
$template->template_content=$request->template_content;
$input = $request->all();
$template->update($input);
$name = $input['title'];
return redirect()->route('templates.index')->with('success', 'Template <b>'. $name.'</b> Updated!');
}
您正在创建新对象$template=new Template();
但是你需要更新现有的,所以试试下面的代码
$template=Template::find($id);
//or use $template=Template::where('id',$id)->first();
$template->title=$request->title;
$template->start_date=convert_to_sql_date_format($request->start_date);
$template->end_date=convert_to_sql_date_format($request->end_date);
$template->is_active=$status;
$template->template_content=$request->template_content;
$input = $request->all();
$template->update($input);
您应该使用 Laravel find
方法,而不是声明它的新实例。
应该是
$template=Template::find($id);
没有
$template=new Template();
在我的例子中,我在方法名称中指定了 table 名称,如下所示。
public function update(Request $request, Template $id)
{
$id->title=$request->title;
$id->start_date=convert_to_sql_date_format($request->start_date);
$id->end_date=convert_to_sql_date_format($request->end_date);
$id->is_active=$status;
$id->template_content=$request->template_content;
$input = $request->all();
$id->update($input);
}