繁体   English   中英

如何在 Laravel 8 中循环更新记录

[英]How do I update records in a loop in Laravel 8

我正在 Laravel 8 中开发学生门户网站。我很想更新 class 科目。

这是我的 controller

public function UpdateAssignSubject(Request $request,$class_id){
      if ($request->subject_id == NULL) {
     
      $notification = array(
          'message' => 'Sorry You did not Select any Subject',
          'alert-type' => 'error'
      );
  
      return redirect()->route('assign.subject.edit',$class_id)->with($notification);
           
      }else{
           
  $countClass = count($request->subject_id);
  AssignSubject::where('class_id',$class_id)->delete(); 
          for ($i=0; $i <$countClass ; $i++) { 
              $assign_subject = new AssignSubject();
                  $assign_subject->class_id = $request->class_id;
                  $assign_subject->subject_id = $request->subject_id[$i];
                  $assign_subject->full_mark = $request->full_mark[$i];
                  $assign_subject->pass_mark = $request->pass_mark[$i];
                  $assign_subject->subjective_mark = $request->subjective_mark[$i];
                  $assign_subject->save();
  
          } // End For Loop  
  
      }// end Else
  
     $notification = array(
          'message' => 'Assigned Subject Updated Successfully',
          'alert-type' => 'success'
      );

这段代码AssignSubject::where('class_id',$class_id)->delete(); 给我带来了问题,因为我将 AssignSubject 用作 pivot 表,因此从长远来看,删除 Id 会产生错误。

这是我的看法

    @foreach($subjects as $subject)
        <option value="{{ $subject->id }}" {{ ($edit->subject_id == $subject->id)? "selected": ""  
      }}>{{ $subject->name }}</option>
        @endforeach 
    
    <div class="form-group">
        <h5 style="color:black">Full Mark <span class="text-danger">*</span></h5>
        <div class="controls">
     <input type="text" name="full_mark[]" value="{{ $edit->full_mark }}" class="form-control" 
    style="background-color: rgb(176, 172, 216);color:black" > 
      </div>    
    <div class="col-md-2">          
      <div class="form-group">
        <h5 style="color:black">Pass Mark <span class="text-danger">*</span></h5>
        <div class="controls">
     <input type="text" name="pass_mark[]" value="{{ $edit->pass_mark }}" class="form-control" 
   style="background-color: rgb(176, 172, 216);color:black"> 
      </div>         
    </div>
        </div>

        <div class="col-md-2">          
      <div class="form-group">
        <h5 style="color:black">Subjective Mark <span class="text-danger">*</span></h5>
        <div class="controls">
     <input type="text" name="subjective_mark[]" value="{{ $edit->subjective_mark }}" class="form- 
      control" style="background-color: rgb(176, 172, 216);color:black"> 
      </div>         
    </div>
        </div>

请问如何在不先删除的情况下更新记录。 任何帮助将不胜感激。

如果它们确实存在,您可以简单地更新它们,而不是删除所有实体。 如果他们不这样做,您需要创建一个新的,就像您在 for 循环中所做的那样。

我调整了您的代码,以检查主题是否已经存在,如果存在则更新它,否则会创建一个新主题

$countClass = count($request->subject_id);

// remove this line
// AssignSubject::where('class_id', $class_id)->delete();

for ($i = 0; $i < $countClass; $i++) {
    // a class can only have each subject 1 time, so you can filter for it
    $entity = AssignSubject::where('class_id', $class_id)
        ->where('subject_id', $request->subject_id[$i])
        ->first();
    
    // if entry does not exist, ->first() will return null, in this case, create a new entity
    $assign_subject = $entity ?? new AssignSubject();
    
    // update columns
    $assign_subject->class_id = $request->class_id;
    $assign_subject->subject_id = $request->subject_id[$i];
    $assign_subject->full_mark = $request->full_mark[$i];
    $assign_subject->pass_mark = $request->pass_mark[$i];
    $assign_subject->subjective_mark = $request->subjective_mark[$i];
    
    // save changes
    $assign_subject->save();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM