首页 > 解决方案 > 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,
        }
    ]
}

这是可能的还是为每个地方做一个记录更好?

标签: phplaravel

解决方案


我认为这取决于您对软件的进一步要求。据我所知,您可以在货架的一个地方放置多个包裹。如果您在模型中存储位置和层数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)

这样您就可以为每个关卡/地点存储附加信息。但这取决于您的要求以及您的软件应该能够完成的任务。


推荐阅读