在Laravel中保存动态表单字段数据

时间:2017-11-01 15:29:43

标签: php mysql laravel laravel-5 eloquent

我有一个可以通过单击按钮添加多行的地方,我想将数据存储到数据库中

这是我提交表单时遇到的错误 - 数组转换为字符串

表单输入我没有发布表单元素,因为我认为我不需要在这里显示它

<input type="text" class="form-control" name="customer[]" />
<input type="text" class="form-control" name="produce[]" />
<select class="form-control" name="task[]">
    <option value=""></option>
    <option value="Pick Up">Pick Up</option>
    <option value="Delivery">Delivery</option>
</select>
<input type="text" class="form-control" name="units[]" />

控制器代码

public function createManifest(Request $request)
    {
        $this->validate($request, [
           // validate hidden
           'date_val'       => 'required',
           'driver_name'    => 'required',
           'truck_num'      => 'required',
           'run_num'        => 'required',
           // validate fields
           'customer'       => 'required',
           'produce'        => 'required',
           'task'           => 'required',
           'units'          => 'required',
        ]);

        $manifest = new Manifest([
           'user_id'        => Auth::user()->id,
           'date'           => $request->input('date_val'),
           'driver_name'    => $request->input('driver_name'),
           'truck_number'   => $request->input('truck_num'),
           'run_number'     => $request->input('run_num'),
           'customer_name'  => $request->input('customer'),
           'produce'        => $request->input('produce'),
           'task'           => $request->input('task'),
           'units'          => $request->input('units'),
        ]);

        $manifest->save();
    }

1 个答案:

答案 0 :(得分:0)

您尝试存储这些值列表的数据库列是字符串,您将数组传递给Manifest的构造函数,因此出错。

为了修复它,你需要告诉Laravel这些值将是数组,以便它可以在数组和字符串之间进行必要的转换 - 它在内部将其编码为JSON。

您需要在模型中添加以下内容:

protected $casts = [
  'customer' => 'array',
  'produce' => 'array',
  'task' => 'array',
  'units' => 'array',
];