【问题标题】:Laravel - Update dynamic form fields in databaseLaravel - 更新数据库中的动态表单字段
【发布时间】:2018-08-26 22:58:41
【问题描述】:

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

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

并且,如果他通过单击表单添加主题 'Add another Subject' 并单击 'Update' 我希望添加这些主题。我在这里错过了什么?

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

我的表单如下所示

新模型

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

主题数据库

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

【问题讨论】:

  • 你得到的错误是什么?
  • 没有错误。更新成功执行,但数据库中未更新主题数。
  • 您在哪里尝试将新主题数量保存到数据库中?
  • 我有Subjects 表有idnew_idsub_codesub_namesub_img,其中new_id 是学生的引用ID。 (更新的问题 - 见截图)
  • 你想做这样的事情吗? Create dynamic forms

标签: mysql laravel laravel-5 dynamic eloquent


【解决方案1】:

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

您引用了新模型:

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

那么你使用了错误的型号产品:

$new=Product::FinOrFail($id)

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

【讨论】:

  • 这是New 模型并已更正。我试过Subjects::UpdateOrCreate(['new_id' =&gt; $new-&gt;id],['sub_code'=&gt;$new_subjects-&gt;sub_code],['sub_name' =&gt; $new_subjects-&gt;col_name], ['sub_img' =&gt; $new_subjects-&gt;col_img]); 但没用。我认为有一种删除/创建/更新表数据的方法,我错过了。 (问题已更新)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2011-03-18
  • 2019-10-11
  • 2020-04-08
  • 1970-01-01
  • 2010-11-30
相关资源
最近更新 更多