我需要建议如何将数组存储到数据库中。例如,我有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
当我用数据填充所有输入时,一切正常。
答案 0 :(得分:1)
我认为问题来自你的规则
'user_phone' => 'required
要验证数组值,您应该使用数组验证。 (Link)
重写你的规则
"user_phone.0" => "required"
这将确保至少提供一个user_phone。
如果你想验证手机格式,请选择:
"user_phone.*" => "{Insert validation here}"
答案 1 :(得分: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()
方法捕获错误。这是我唯一的解决方案。