如何在Laravel控制器中更新数据?

时间:2020-02-14 04:01:19

标签: php laravel sql-update 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!');
    }

3 个答案:

答案 0 :(得分:1)

您创建新对象$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);

答案 1 :(得分:1)

您应该使用Laravel try { using (var db = new DBEntities()) { var result = db.Database.SqlQuery<EmployeesData>("exec uspDataOfEmployee {0} , {1}", EmployeeId , Convert.ToDateTime(month).ToString("yyyy-MM-dd")).ToList(); return result; } } catch (Exception ex) { Logger.Instance.Error(ex, "Exceptio while calling procedureName( method.", EmployeeId.ToString()); throw; } 方法,而不是声明它的新实例。

应该是

find

不是

$template=Template::find($id);

答案 2 :(得分:1)

就我而言,我在方法名称中指定表名,就像这样。

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);
}