如果未选择任何选项,则多选返回“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”的主要内容,如果未能解决你的问题,请参考以下文章

带有对象的角度材质多选选项

如何在多选表单 laravel 中选择所有选项?

多选插件不显示任何选项

Select2 多选空白选项始终选中

如果未选择任何选项,Laravel 将忽略选择输入验证

引导多选下拉菜单从 optgroup 中取消选择相同的值选项