Laravel关系“无模型”

时间:2019-03-06 14:08:00

标签: php laravel

简短说明

我有条形码,其中包含有关库存货架的数据。我有多个架子,并且不想为每个架子位置和级别创建自己的数据库记录。取而代之的是,我有关于每个架子包含多少个位置(又称列)和级别(又称行)的记录。

是否可以通过使用条形码搜索来解析并返回这种自定义模型?

更详细的解释

我在每个库存货架上都有可扫描的条形码。条形码包含有关架子,位置和水平的数据。

在数据库中,我有模型架,该架具有整数属性“位置”和“级别”。

在以下示例中,我有3个货架。货架A是最大的货架,每4层有8个储物空间。架子B小一点,架子C最小,只有2个地方,只有一层。

| Id | Name | Places | Levels |   
|----|------|--------|--------|
| 1  | A    | 8      | 4      |
| 2  | B    | 5      | 4      |
| 3  | C    | 2      | 1      |

另一个型号Package属于那些带有支点的货架。包裹可以放在架子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,
        }
    ]
}

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

1 个答案:

答案 0 :(得分:0)

我认为这取决于您对该软件有什么进一步的要求。据我所知,您可以在一个架子的某个位置放置多个包装。 如果您在Shelf模型中存储位置和级别的数量,则假定该架子中的所有级别和位置都共享相同的属性(例如,高度,宽度等)。 如果确实如此,我认为您可以采用建议的模型。

但是您现在将包裹的位置存储在枢轴中-仅当您想为同一包裹和架子有多个条目时才有意义,例如如果您将包裹移到另一个架子上并希望保留旧信息。如果不需要“位置记录”,则可以将级别和位置放在Package模型中,而不是放在透视图中。

如果要使用完整的“关系MySQL样式”,我将为每个属性创建不同的模型。 Package应该在Place中,Place位于Level内,而Level属于Shelf,为您提供以下内容结构

Shelf (id, name)
Level (id, shelf_id)
Place (id, level_id)
Package (id, place_id)

这样,您可以存储每个级别/位置的其他信息。但这取决于您的要求以及您的软件应该能够完成的工作。