php - Laravel 关系“无模型”
问题描述
简短说明
我有条形码,其中包含有关库存货架的数据。我有多个货架,不想为每个货架位置和级别创建自己的数据库记录。而不是这个,我记录了每个架子包含多少个地方(又名列)和级别(又名行)。
是否可以通过条形码搜索来解析并返回这种自定义模型?
更详细的解释
我在每个库存货架上都附有可扫描的条形码。条形码包含有关货架、位置和级别的数据。
在数据库中,我有具有整数属性“位置”和“级别”的模型 Shelf。
在以下示例中,我有 3 个架子。货架 A 是最大的一个,每 4 层有 8 个存储位置。架子 B 有点小,架子 C 是最小的,只有 2 个地方,只有一层。
| Id | Name | Places | Levels |
|----|------|--------|--------|
| 1 | A | 8 | 4 |
| 2 | B | 5 | 4 |
| 3 | C | 2 | 1 |
另一个模型包属于那些带有枢轴的货架。包裹可以放在架子 A 的第 1 层和第 2 层。
{
id: 1,
shelf_id: 1,
receiver_id: 123,
pivot: {
place: 1,
level: 2
},
id: 2,
shelf_id: 1,
receiver_id: 567,
pivot: {
place: 1,
level: 2
},
}
现在,当我使用条形码数据“A-1-2”(条形码数据:)搜索时,SHELF-AREA-LEVEL
我会得到 id 为 1 和 2 的包。
{
id: 1,
name: 'A',
place: 1,
level: 2,
packages: [
{
id: 1,
receiver_id: 123,
},
{
id: 2,
receiver_id: 456,
}
]
}
这是可能的还是为每个地方做一个记录更好?
解决方案
我认为这取决于您对软件的进一步要求。据我所知,您可以在货架的一个地方放置多个包裹。如果您在模型中存储位置和层数Shelf
,则假设该货架内的所有层和位置共享相同的属性(例如高度、宽度等)。如果确实如此,我认为您可以使用您提出的模型。
但是您现在将包裹的位置存储在枢轴中 - 这只有在您想要为同一个包裹和货架有多个条目时才有意义,例如,如果您将包裹移动到另一个货架并且想要保留旧信息. 如果您不需要“位置历史记录”,您可以将关卡和位置放在Package
模型中而不是轴中。
如果您想采用完整的“关系 MySQL 风格”,我将为每个属性创建不同的模型。APackage
应该在 a 中Place
,aPlace
位于 a中Level
,并且 aLevel
属于 a Shelf
,为您提供以下结构
Shelf (id, name)
Level (id, shelf_id)
Place (id, level_id)
Package (id, place_id)
这样您就可以为每个关卡/地点存储附加信息。但这取决于您的要求以及您的软件应该能够完成的任务。
推荐阅读
- jenkins - 使用声明式管道在不同的存储库上并行运行相同的 Jenkins 作业
- ios - 写入领域(成功),继续到 NextVC(成功)并显示保存到领域的先前 VC 的字符串数据(需要帮助)
- c# - 何时在 EF Core 中使用异步方法?
- php - 如何防止一个模型在 OneToOne 关系中有多个模型?[拉拉维尔]
- apache-kafka - 用于 API 生成消息、创建消费者组、订阅消费者组和读取记录的 Kafka 命令
- json - JQ 键映射名称为大写并删除空格
- java - TreeSet 中的 Java 私有整数
- flutter - 如何重置 ListView.Builder 索引
- css - 为什么我不能正确旋转 Safari 和 iPhone 中的重叠元素?
- react-native - 重新激活的 useCode 挂钩无法按预期工作