我有两个表学生和科目。
学生表
+----+------+
| ID | Name |
+----+------+
| 1 | John |
| 2 | Doe |
+----+------+
主题表
+----+------------+------+---------+
| ID | Student_ID | Name | sub_mage |
+----+------------+------+---------+
| 1 | 1 | Eng | eng.jpg |
| 2 | 1 | Math | mth.jpg |
| 3 | 2 | Sci | sci.jpg |
+----+------------+------+---------+
我想从动态表单更新两个表,用户可以根据需要添加或删除任意数量的主题。
到目前为止,如果我上传与数据库中完全相同数量的字段,我的表单会更新。但是,如果我只更新主题代码而不上传主题图像,它将不会更新。
此外,如果我在编辑表单中添加或删除字段,则表格不会更新。
修改视图
<form action="{{action('Controller@update', $id)}}" enctype="multipart/form-data" method="post" files="true">
@foreach($subjects as $sub)
<div class="fields">
<input type="text" name="sub_code[]">
<input type="text" name="sub_name[]">
<input type="file" name="sub_img[]">
<button class="remove">Delete this subject</button>
</div>
@endforeach
</form>
学生模型
public function subs() {
return $this->hasMany(Subjects::class, 'student_id');
}
主题模型
public function subjects()
{
return $this->belongsTo(Students::class, 'student_id');
}
控制器
public function update(Request $request, $id)
{
$requestAll = $request()->all();
$student = Students::findOrFail($id);
$subjects= Subjects::with(['subjects','user'])->where('student_id', $student->id)->get();
if($student->update($requestAll))
{
$sub_img = request()->file('sub_img');
$i = 0;
if(isset($sub_img[$i]))
{
$pathToStore = public_path('images');
foreach ($subjects as $new_subjects)
{
$img = $sub_img[$i]->getClientOriginalName();
$img_name_ext = $sub_img[$i]->getClientOriginalExtension();
$img_name = $img.'-'.time().'.'.$img_name_ext;
Image::make($images[$i])->save($pathToStore . DIRECTORY_SEPARATOR. $img_name);
$new_subjects->sub_code = request('sub_code')[$i];
$new_subjects->sub_name = request('sub_name')[$i];
$new_subjects->sub_img = "images/{$sub_img}";
$i++;
$student->subs()->save($new_subjects);
}
}
}
}