首页 > 解决方案 > 不能将多个 FormItems 数据存储到 DB

问题描述

我正在使用Laravel 5.7.*.

我有一个formand it's formItems, Like form HasMany formItemsand formItems belongsTo form,当我点击提交时,我看到DBformItems存储了一个,尽管我尝试存储多个formitem

这是我的store method

public function store(Request $request) {
  $formItems = collect();
  // dd($request);
  // dd($request->formItems);
  // // dd($familymember);
  foreach($request['formItems'] as $formItem) {
    $formItems->push(new FormItem([
      'family_name' => $formItem['family_name'],
      'family_phone' => $formItem['family_phone'],

    ]));
  }

  $form = Form::create([
    'user_phone' => $request['user_phone'],
    'user_cnic' => $request['user_cnic'],
  ]);

  $form->formItems()->saveMany($formItems);
}

这是我的HTML formItems

<form>
  <fieldset>
    <table class="table table-bordered fieldGroup">
      <tbody>
        <tr>
          <td><input type="text" name="formItems[0][family_name]" class="form-control form-control-sm" placeholder="Full Name"></td>
          <td><input type="text" name="formItems[0][family_phone]" class="form-control form-control-sm" placeholder="Phone"></td>
          <td colspan="3">
            <a href="javascript:void(0)" class="btn btn-success addMore"><span class="glyphicon glyphicon glyphicon-plus" aria-hidden="true"></span>+</a>
          </td>
        </tr>
      </tbody>
    </table>
    <div class="form-group">

      <div class="text-center">
        <button class="btn btn-success" type="submit">Submit</button>
      </div>

    </div>
  </fieldset>
</form>

<fieldset form="formId">
  <table class="table table-bordered fieldGroupCopy" style="display: none;">
    <tbody>
      <tr>
        <td><input type="text" name="formItems[0][family_name]" class="form-control form-control-sm" placeholder="Full Name"></td>
        <td><input type="text" name="formItems[0][family_phone]" class="form-control form-control-sm" placeholder="Phone"></td>
        <td><a style="align-items: center; justify-content: center; display: flex;" href="javascript:void(0)" class="btn btn-danger remove"><span class="glyphicon glyphicon glyphicon-remove" aria-hidden="true"></span>x</a></td>
      </tr>
    </tbody>
  </table>
</fieldset>

From模型:

class Form extends Model
{
    protected $fillable = [
        'user_phone',
        'user_cnic',
    ];

    protected $with = [
        'formItems',
    ];

    public function formItems()
    {
        return $this->hasMany(FormItem::class);
    }
}

FromItem模型:

class FormItem extends Model
{
    protected $fillable = [
        'form_id',
        'family_name',
        'family_phone',
    ];

    public function form()
    {
        return $this->belongsTo(Form::class);
    }
}

更新图像: 在此处输入图像描述

dd($request->all())结果:

array:12 [▼
  "_token" => "tEDC2rrDXInWeKQzFFSyk0gRoiC19Dr4HIqpf5P1"
  "user_phone" => null
  "user_cnic" => null
  "user_dob" => null
  "user_gender" => "male"
  "user_landmark" => null
  "user_hfname" => null
  "user_address" => null
  "user_name" => null
  "user_family_no" => "1"
  "user_email" => null
  "formItems" => array:1 [▼
    0 => array:6 [▼
      "family_relation" => "father"
      "family_name" => null
      "family_dob" => null
      "family_hfname" => null
      "family_phone" => null
      "family_email" => null
    ]
  ]
]

标签: htmldatabaselaravellaravel-5.7

解决方案


请尝试以下代码

public function store(Request $request) {

    $form = Form::create([
        'user_phone' => $request['user_phone'],
        'user_cnic' => $request['user_cnic'],
    ]);

    $form_items = [];
    foreach($request['formItems'] as $form_item) {
        $form_items[] = new FormItem([
          'form_id' => $form->id,
          'family_name' => $form_item['family_name'],
          'family_phone' => $form_item['family_phone']
        ]);
    }

    $form->formItems()->saveMany($form_items);
}

推荐阅读