Laravel - 编辑&更新动态表单字段(一对多关系)

时间:2018-03-16 07:48:45

标签: php laravel laravel-5 dynamic one-to-many

我有两个表学生和科目。

学生 +----+------+ | 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 | +----+------------+------+---------+

我想从动态表单更新两个表,用户可以根据需要添加或删除任意数量的主题。

修改表单 Edit form with dynamic fields

到目前为止,如果我上传与数据库中完全相同数量的字段,我的表单会更新。但是,如果我只更新主题代码而不上传主题图像,它将不会更新。

此外,如果我在编辑表单中添加或删除字段,则表格不会更新。

修改视图

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

0 个答案:

没有答案