【问题标题】:How to update data in Laravel controller?如何更新 Laravel 控制器中的数据?
【发布时间】:2020-02-14 04:01:19
【问题描述】:

我正在尝试在控制器中更新我的模板详细信息。但目前,我的代码不起作用。它不会更新字段。无论如何,如果我添加 $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!');
    }

【问题讨论】:

  • 你应该添加更新位置的条件

标签: php laravel sql-update laravel-controller


【解决方案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);

【讨论】:

    【解决方案2】:

    您应该使用 Laravel find 方法,而不是声明它的新实例。

    应该是

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

    没有

    $template=new Template();
    

    【讨论】:

      【解决方案3】:

      在我的例子中,我在方法名中指定了表名,像这样。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        相关资源
        最近更新 更多