首页 文章

将数组元素存储到数据库(Laravel)

提问于
浏览
1

我需要建议如何将数组存储到数据库 . 例如,我有 name="user_phone[]" 的输入,我想将数据输入到数据库 . 我有一个这样的表格,还有其他输入,但我只复制一个:

{!! Form::open([route('some.router')]) !!}

 <fieldset class="form-group">
   {{ Form::label(null, 'Phone') }}
     {{ Form::text('user_phone[]', null, ['class' => 'form-control'] ) }}
 </fieldset>

{!! Form::close() !!}

和控制器:

public function postAddOrder(Request $request)
    {
        $this->validate($request, [
            'receipt_date' => 'date|required',
            'return_date' => 'date|required',
            'user_name' => 'required',
            'user_phone' => 'required',
            'work_sum' => 'integer|required',
            'user_descr' => 'required',
            'foruser_descr' => 'required'
        ]);

        $user = new User;
        $user = $user->all()->find($request->input('user_name'));

        $order = new Order([
            'receipt_date' => $request->input('receipt_date'),
            'return_date' => $request->input('return_date'),
            'user_name' => $user->fio,
            'user_phone' => $request->input('user_phone'),
            'device' => $request->input('device'),
            'work_sum' => $request->input('work_sum'),
            'master_name' => $request->input('master_name'),
            'user_descr' => $request->input('user_descr'),
            'foruser_descr' => $request->input('foruser_descr'),
            'type' => $request->input('type'),
            'status' => $request->input('status'),
            'engineer' => $request->input('engineer'),
            'partner' => $request->input('partner'),
            'office' => $request->input('office')
        ]);

        $order->save();

        return redirect()->route('admin.orders.index');

    }

问题是当我提交表单并收到错误时:

htmlentities() expects parameter 1 to be string, array given

我也使用强制转换将数组存储到DB:

/**
     * The attributes that should be casted to native types.
     *
     * @var array
     */
    protected $casts = [
        'user_phone' => 'array',
    ];

值正确存储,主要问题是validate()方法没有捕获错误 . 例如,我没有在所需的输入中填充一些数据 . 而不是像错误一样得到错误,我得到错误

htmlentities() expects parameter 1 to be string, array given

当我用数据填充所有输入时一切正常 .

2 回答

  • 1

    我认为问题来自你的规则

    'user_phone' => 'required
    

    要验证数组值,您应该使用数组验证 . (Link

    像这样重写你的规则

    "user_phone.0" => "required"
    

    这将确保至少提供一个user_phone .

    如果你想验证手机格式,请选择:

    "user_phone.*" => "{Insert validation here}"
    
  • 0

    找到了定义 .

    {!! Form::open([route('some.router')]) !!}
    
     <fieldset class="form-group">
       {{ Form::label(null, 'Phone') }}
         {{ Form::text('user_phone[0]', null, ['class' => 'form-control'] ) }}
     </fieldset>
    
    {!! Form::close() !!}
    

    我们必须在投入中传递指数 . 就像 name="user_phone[0]" 之后我们没有得到错误:

    htmlentities() expects parameter 1 to be string, array given
    

    并且 validate() 方法捕获错误 . 这是我唯一的解决方案 .

相关问题