Laravel - 更新数据库中的动态表单字段

时间:2018-03-18 06:25:22

标签: mysql laravel laravel-5 dynamic eloquent

我有一个动态表单,用户应该可以在编辑时添加或删除字段。

我能够更新数据库表中的确切数字字段。但我想要的是,如果用户点击'Delete Subject''Update'按钮,我希望从数据库中删除整行。

并且,如果他通过点击'Add another Subject'表单添加主题并点击'Update'我想要添加这些主题。我在这里缺少什么?

注意:我在主题之间建立了一对多关系,其中New有很多主题,很多主题属于New(它工作正常) )。

我的表单看起来像这样 Dynamic Form Fields - Subjects

新模式

protected $fillable = ['name', 'address'];
public function subjects() {
    return $this->hasMany(Subjects::class, 'new_id');
}

主题模型

protected $fillable = ['new_id', 'sub_code', 'sub_name', 'sub_img'];

public function subs(){
    return $this->belongsTo(New::class, 'new_id');
}

创建方法

public function create(Request $request, New $new){
$new = New::FindorFail($id)
$subjects= [];
        $sub_images = $request->file('sub_img');
        $sub_name = $request->sub_name;

        for ($i=0; $i < count(request('sub_code')); ++$i) 
        {
        $subjects = new Subjects;
        $subjecs->sub_code = request('sub_code')[$i];
        $subjects->sub_name = request('sub_name')[$i];
        $sub_img_name = uniqid() . '.' . $sub_images[$i]->getClientOriginalExtension();
        $sub_images[$i]->move(public_path('/images/'), $sub_img_name);            
        $subjects->sub_img = '/images/'.$sub_img_name;
        $new->subjects()->save($subjects);
        }
     }

更新方法

public function update(Request $request, $id){
$new=New::FindOrFail($id)
$subjects = Subjects::with(['subs'])->where('new_id', $new->id)->get();
$new->update($request->all());

$i=0;
foreach( $subjects as $new_subjects)
   {
    $sub_images =request()->file('sub_img');    
    $sub_name = request('sub_name');
    if(isset($sub_images[$i]))
      {
       $pathToStore = public_path('images');    
       if($request->hasFile('sub_img') && isset($sub_images[$i]))
         {
          $sub_img_name = uniqid() . '.' . $sub_images[$i]->getClientOriginalExtension();
           $sub_images[$i]->move(public_path('/images/'), $sub_img_name);            
           $new_subjects->sub_img = '/images/'.$sub_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_name}";
           $i++;
           $new->subjects()->save($new_subjects);
        }
      }
    }
  }

主题数据库

我希望在用户编辑表单后更新(添加或删除)此表行。

NEW can have many subjects.

1 个答案:

答案 0 :(得分:0)

根据我对Laravel的经验,我认为问题在于您调用的是Product模型而不是New模型,所以可能需要修复它。

您参考新模型:

public function subs(){ enter code herereturn $this->belongsTo(New::class, 'new_id'); }

然后你使用错误的模型产品:

$new=Product::FinOrFail($id)

另一件事是仔细检查主题模型中的fillable属性,还可以编写更新操作并执行类似

的操作