[英]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.