laravel - Laravel:将多维数组转换为集合
问题描述
在我的项目中,我有以下结构的动态形式:
- Date 1
- Shift 1
- Area 1
- Cell 1
- Cell 2
- Area 2
- Cell 3
- Cell 4
- Shift 2
- Area 1
- Cell 1
...
我使用以下多维数组从输入中获取数据:data[index][column],其中列可能是:日期、班次、区域、单元格或单元格内容。
然后我需要将此表单存储到数据库中,以便以后重新创建它。这很容易,因为我的数组有一个表格形式:
index | Date | Shift | Area | Cell | Cell Content
1 05.06 1 1 1 100
2 05.06 1 1 2 99
3 05.06 1 2 3 55
4 05.06 1 2 4 66
5 05.06 2 1 1 35
但是当重新创建表单(从数据库中取回)时,最好将此数组转换为集合,以便能够执行以下 foreach:
foreach (dates as date)
foreach (date->shifts as shift)
foreach (shift->areas as area)
foreach (area->cells as cell)
echo cell->content
endforeach
endforeach
endforeach
endforeach
在 Laravel 中可以吗?或者我需要使用旧方法:将当前元素与先例进行比较,并在不同时打破 for?
解决方案
我在这里看到的问题是所有列都存储在同一个表中,即你有一个非规范化的结构。一个简单的解决方案是规范化您的数据(可能会带来成本),然后在 Laravel 中定义关系将非常简单。
所以我建议你把你的单表分成:
- 日期(id,日期)
- 班次(id、date_id、班次)
- 区域(id、shift_id、区域)
- 细胞(id,area_id,细胞)
现在您还可以选择拥有冗余数据并将 shift_id 和 date_id 添加到您的单元格表中。如果节省空间不是您关心的问题,则可以两种方式存储数据。
阅读有关规范化的更多信息https://www.geeksforgeeks.org/database-normalization-normal-forms/
推荐阅读
- powershell - 在远程服务器上按顺序停止和启动服务
- cxjs - CXJS 与现有 webapp 集成时,如何从全局范围启动 Apploop?
- css - CSS Grid - 带有网格间隙的 fr 的意外行为
- c# - 实体框架:为什么 DbContext 是具体类而不是抽象类?
- c++ - 物化纯右值成员访问的 decltype 行为不正确
- wordpress - 如何为 Woocommerce 变体添加子类别(另一个级别)
- sockets - 关于如何创建信息监控服务器的建议
- html - 如何在 pdf 的每一页上重复水印图片,该 pdf 是从包含几个 page-break-before/after 的 html doc 转换而来的?
- android - 由于 Firebase 尝试在只读数据库中写入崩溃报告,应用程序崩溃
- python - 最长的字母子串 - 从哪里开始