2016-09-16 42 views
1

我需要建議如何將數組存儲到數據庫。例如,我有一個輸入name="user_phone[]",我想存儲到數據庫的這個輸入的值。 我有一個表格,像這樣,也沒有其他的輸入,但只複製一個:將元素數組存儲到數據庫(Laravel)

{!! 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 

當IM用數據填充一切都輸入變爲確定。

+0

您可以使用php的'implode'函數並將逗號分隔的值存儲到數據庫中.. – Jaimin

回答

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

1

我認爲這個問題是來自您的規則

'user_phone' => 'required 

要驗證數組值,你應該使用數組驗證。 (Link

重寫規則,像這樣

"user_phone.0" => "required" 

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

如果你想驗證手機格式只是去:

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

也得到相同的錯誤 – pwnz22

+0

'{{Form :: text('user_phone []',null,['class'=>' form-control'])}}'是否有這樣的輸入?用這個括號來存儲數組值?或者拉拉維爾有另一種方式? – pwnz22

+0

沒問題。 您是否確定錯誤是在驗證階段還是在訂單創建過程中發生? – Hyti

0

一般的建議是不要做它。 如果您使用常規SQL數據庫,請記住,表格本身是一個多維數組。

以下鏈接可能對你有用:Save PHP array to MySQL?