Laravel Blade中如何将关联值下拉框转换为Form::类写法
Laravel Blade 原生select转Form门面写法
你原来遍历关联模型生成下拉选项的逻辑,不需要手动写foreach循环,直接用集合的pluck()方法提前整理好选项键值对,传入Form::select()方法即可。
转换后代码
{{ Form::select( 'department', $managers->pluck('user.name', 'user.id')->toArray(), old('department', null), ['class' => 'form-control'] ) }}
参数说明
- 第一个参数:对应原生select的
name属性值,这里就是department - 第二个参数:下拉选项的键值对数组,用集合的
pluck()方法直接提取关联数据:- 第一个传参
user.name对应option的显示文本,也就是你原来写的{{$manager->user->name}} - 第二个传参
user.id对应option的value值,也就是你原来写的{{$manager->user->id}} - 调用
toArray()把集合转成普通数组传给select组件,完全替代手写foreach遍历的逻辑
- 第一个传参
- 第三个参数:默认选中值,这里用
old('department', null)可以自动回显表单验证失败后的旧值,没有旧值时默认不选中任何项;如果需要绑定模型的默认值,把第二个默认参数改成对应字段值即可,组件会自动给匹配的option加上selected属性,不需要手动写判断 - 第四个参数:select标签的附加HTML属性数组,你可以按需加id、required、自定义样式类等属性,比如传
['id' => 'dept-select', 'required' => 'required']就会自动生成对应的标签属性,不需要额外属性时传空数组即可
前置说明
Laravel 5.8之后的版本默认移除了Form门面,如果你调用时报类不存在的错误,先安装对应依赖包即可,安装命令:
composer require laravelcollective/html
内容的提问来源于stack exchange,提问作者HarLton Hinon
相关产品推荐
相关产品推荐

