如果未选择任何选项,则多选返回“null”
Posted
技术标签:
【中文标题】如果未选择任何选项,则多选返回“null”【英文标题】:multiple select returns 'null' if no option selected 【发布时间】:2015-07-02 08:14:26 【问题描述】:当多选框为空时,返回空值 - 这会在对数据透视表使用同步命令时导致错误。如何让选择框返回一个空白数组 '' 而不是 null?
!! Form::select('tag_list[]', $tags, '', array('class' => 'select2 form-control', 'multiple')) !!
我能够解决问题的唯一方法是在同步之前检查 null,即
private function syncTags(Company $company, $tags)
if (is_null($tags))
$tags = [];
$company->tags()->sync($tags);
【问题讨论】:
一个稍微简单的方法可能只是$company->tags()->sync($tags ?: []);
,虽然它不能完全解决您的问题,但它更短但仍然易于阅读。
请注意,这不是 Select2 问题,这是任何 <select multiple>
没有选择时会发生的情况。
【参考方案1】:
如果没有选择,那么 Laravel 确实返回 null。手动空检查是解决问题的一种方法,就像您已经做过的那样。
另一个选项是如果用户没有选择“某事”,则默认选择它,但这是一个丑陋的 hack。我已经使用具有相同名称的隐藏输入来完成它。一个将覆盖另一个,如果未选择任何内容,则将使用隐藏的输入值。
【讨论】:
【参考方案2】:到目前为止,这是最好的解决方案(还是有点难看!)
$tags = $request->input('tag_list', []);
$company->tags()->sync($tags);
【讨论】:
以上是关于如果未选择任何选项,则多选返回“null”的主要内容,如果未能解决你的问题,请参考以下文章