【问题标题】:How to update multiple record using Laravel?如何使用 Laravel 更新多条记录?
【发布时间】:2020-11-13 11:24:24
【问题描述】:

我想更新与项目相关的多条记录,并且我已经制定了在控制器中存储数据的逻辑;它完美地添加了多条记录,但我不知道该怎么做。

我还想更新数据库中已经存在的多条记录。

https://ibb.co/sjNKMzJ

模型问题

     public function project()
   {
       return $this->hasOne('App\Project','project_id',id)
   }

模型项目

     public function issue()
   {
       return $this->hasMany('App\Issue','id','project_id')
   }

回复回复

 // http://localhost/hourlog/cms/public/projects/43/issues/update
    
    {
      "_token": "S6typbw0hywPqaUdxCTqWeJNieyl3VieQhCHqDZ7",
      "date": [
        "2020-07-06",
        "2020-07-22",
        "2020-07-11"
      ],
      "issue": [
        "edit issue",
        "delete issue on web",
        "update issue on cms"
      ]
    }

控制器

public function issuesUpdate(Request $request, Project $project)
   {
       $issues =Issue::where('project_id',$project->id)->get();            

        //for add new record 
        foreach($request->date  as  $key2 => $val){
            $issue               =  new Issue;
            $issue->date         =  $val;
            $issue->issue        =  $request->issue[$key2];
            $issue->project_id   =  $project->id;
            $issue->save();
        }
         return redirect()->route('project');
}

html 视图

 <form action="{{ route('project.issues.update',[$project->id])}}" method="POST">
      @csrf
     
      <div class="portlet">
        <div class="portlet-heading bg-light-theme">
          <h3 class="portlet-title">
            <span class="ti-user mr-2">
            </span>Add Issues
          </h3>
          <div class="portlet-widgets">
            <span class="divider">
            </span>
            <button type="submit"  class="btn btn-white waves-effect btn-rounded">
              <span class="btn-label">
                <i class="fa fa-save">
                </i>
              </span> Save
            </button>
          </div>
          <div class="clearfix">
          </div>
        </div>
        <div id="bg-inverse" class="panel-collapse collapse show" style="">
          <div class="portlet-body">
            <div class="card-box">
              <div class="row">
                <div class="col-md-12 mt20">
                  <div class="addMore">
                    <div class="addmore_cont">
                      <div class="addMore_btn">
                       
                        <div class="mt12 pull-right">
                          <button type="button" title="Add More" class="btn btn-success waves-effect 
                          waves-light btn-sm add_more" data-key="">
                            <i class="fa fa-plus">
                            </i>
                          </button>
                        </div>
                          <div class="row addmore_issues">
                  <div class="col-md-12">
                    @if(count($issues))
                    @foreach($issues   as  $key => $details)
                  
                    <div class="row">
                      <div class="col-md-5">
                        <div class="form-group">
                          <input required type="date" value="{{$details->date}}" 
                  name="date[]" class="form-control"
                                 aria-describedby="emailHelp" >
                        </div>
                      </div>
                      <div class="col-md-5">
                        <div class="form-group">
                          <input required type="text"  value="{{$details->issue}}"  
              name="issue[]" class="form-control"
                                 aria-describedby="emailHelp" placeholder="Issue...">
                        </div>
                      </div>
                      <div class="col-md-1 mt12">
                        <button type="button" class="btn btn-danger waves-effect waves- 
                      light btn-sm delete">
                          <i
                             class="fa fa-times">
                          </i>
                        </button>
                      </div>
                    </div>
                    @endforeach
                    @else
                       <div class="row">
                      <div class="col-md-5">
                        <div class="form-group">
                          <input required type="date" value="" name="date[]" class="form-control"
                                 aria-describedby="emailHelp" >
                        </div>
                      </div>
                      <div class="col-md-5">
                        <div class="form-group">
                          <input required type="text"  value=""  name="issue[]" class="form-control"
                                 aria-describedby="emailHelp" placeholder="Issue...">
                        </div>
                      </div>
                    </div>
                    @endif

                  </div>
                </div>
                <!--end row-->
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </form>

路线

  Route::post('/projects/{project}/issues/update', "ProjectController@issuesUpdate")- 
  >name('project.issues.update');       

【问题讨论】:

    标签: laravel


    【解决方案1】:

    首先改变你的数据格式

      "date": [
        "2020-07-06",
        "2020-07-22",
        "2020-07-11"
      ],
      "issue": [
        "edit issue",
        "delete issue on web",
        "update issue on cms"
      ]
    

    [
      ["date"=>"2020-07-06","issue"=>"edit issue"],
      ["date"=>"2020-07-22","issue"=>"delete issue on web"],
      ["date"=>"2020-07-11","issue"=>"update issue on cms"]
    ]
    

    你可以使用下面的html格式来制作它

      <input required type="date" value="{{$details->date}}" 
                  name="issues[{{$key}}][date]" class="form-control"
                                 aria-describedby="emailHelp" >
    

    内部控制器

    public function issuesUpdate(Request $request, Project $project)
    {
       $issues = $request->issues;
       $insertData = [];
       foreach($issues as $key=>$issue){
          $issue["project_id"] = $project->id;
          $insertData[] = $issue;
       }
       Issue::where('project_id',$project->id)->delete();// to not insert duplicate issues for the same project
       Issue::insert($insertData);
       return redirect()->route('project');
    }
    

    【讨论】:

    • 请我认为这是存储数据的逻辑我如何更新多条记录?
    • 如果你想用相同的 project_id 更新 3 个问题,那么你必须运行查询 3 次。相反,您可以运行 1 个查询来删除并运行 1 个查询来插入。你不会失去你的联系。
    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多