【发布时间】:2016-12-09 07:01:06
【问题描述】:
在我的控制器中,我收到一个 Illuminate\Http\Request 请求,其中包含一些值等于空字符串的数据:
dd($request->input())
//output
array:5 [▼
"_token" => "K43q88mR5zQRqVPAuYX5IWtQ1khQ24JTsuxl8mz4"
"param1" => "1"
"param2" => "2"
"param3" => ""
"param4" => ""
]
(由于前端限制see here,基本上当用户在创建表单中没有选择时会发生这种情况,我无法更改请求的形式,因此排除空字符串值被发送到服务器)
请求输入数据用于将关系附加到模型。例如:
$book->authors()->attach($request->input('param1'));
问题在于,当输入值等于空字符串"" 时,上面的行会抛出QueryException,因为它试图将等于"" 的外键添加到数据透视表中。
另一方面,我注意到如果值为null 而不是"",则不会执行attach() 方法,因此不会抛出异常,也不会更新数据库,这正是当用户在输入表单中没有选择时,我想要的行为。
我的问题是 如何将请求值从 "" 更改为 null? 我的第一个想法是创建一个辅助函数来迭代请求输入数组并将 "" 替换为null 并在控制器中使用它,但它对我来说似乎不是一个好主意,因为在使用表单请求验证时,这不会防止可能出现的不需要的验证错误。
有什么想法吗???
提前谢谢你
【问题讨论】:
标签: database laravel httprequest jquery-select2