如何更新 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);
}