簡體   English   中英

將元素數組存儲到數據庫(Laravel)

[英]Store an array of elements to database (Laravel)

我需要建議如何將數組存儲到數據庫。 例如,我有一個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

此外,我正在使用強制轉換將數組存儲到數據庫:

/**
     * 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

當我用數據填充所有輸入時,一切正常。

我認為問題出在你的規則上

'user_phone' => 'required

要驗證數組值,您應該使用數組驗證。 (鏈接)

像這樣重寫你的規則

"user_phone.0" => "required"

這將確保至少提供一個 user_phone。

如果您想驗證電話格式,請使用:

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

找到了定義。

{!! 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()方法捕獲錯誤。 這是我唯一的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM