Laravel 8中如何获取多选下拉框的数据库存储值?
解决多选下拉框存储数组后在Blade视图中显示的问题
1. 确认数据库存储格式
先查看数据库中tool_id字段的存储内容:
- 若为JSON格式(如
["1","3","5"]),用JSON解析处理 - 若为逗号分隔字符串(如
1,3,5),用字符串拆分处理 - 若为序列化字符串(如
a:3:{i:0;s:1:"1";i:1;s:1:"3";i:2;s:1:"5";}),用反序列化处理
2. 模型层自动转换(推荐)
在对应数据模型中添加$casts属性,让Laravel自动完成数组与存储格式的双向转换:
// 示例模型:Kit.php class Kit extends Model { protected $casts = [ 'tool_id' => 'array', // 自动将JSON字符串转数组,存储时自动转JSON ]; }
3. 控制器传递数据到视图
在show方法中取出模型数据,如需显示工具名称则关联查询对应数据:
public function show($id) { $kit = Kit::findOrFail($id); // 未设置$casts时手动解析(根据存储格式选其一): // $toolIds = json_decode($kit->tool_id, true); // JSON格式 // $toolIds = explode(',', $kit->tool_id); // 逗号分隔格式 // $toolIds = unserialize($kit->tool_id); // 序列化格式 // 取出对应工具信息(用于显示名称) $tools = Tool::whereIn('id', $kit->tool_id)->get(); return view('kit.show', compact('kit', 'tools')); }
4. Blade视图中显示数据
方式一:直接显示工具ID数组
<p>选中的工具ID:{{ implode(', ', $kit->tool_id) }}</p>
方式二:显示工具名称(推荐)
<h3>已选工具:</h3> <ul> @foreach($tools as $tool) <li>{{ $tool->name }}</li> @endforeach </ul>
方式三:用关联关系实现(更优雅)
在模型中定义多对多关联:
// Kit模型 public function tools() { return $this->belongsToMany(Tool::class, 'kit_tool', 'kit_id', 'tool_id'); }
控制器直接通过关联取数据:
public function show($id) { $kit = Kit::with('tools')->findOrFail($id); return view('kit.show', compact('kit')); }
视图遍历关联数据:
<h3>已选工具:</h3> <ul> @foreach($kit->tools as $tool) <li>{{ $tool->name }}</li> @endforeach </ul>
内容的提问来源于stack exchange,提问作者POONAM KHATRI
相关产品推荐
相关产品推荐

