前端做了一个用户背包,如何显示,插入数据比较好?

Laravel 7.x
目前站内给用户做了一个小背包,有9个格子,请问如何往里面存放物品数据会比较好?

目前自己只能想到遍历每个格子是否已经有物品数据,如果没有就插入物品数据,有就跳过到下一个格子
然后返回物品图片地址给前端显示
这是背包Mysql表

请问大家是怎样做的?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

为什么不用 mysql 的 json 类型 存储呢?
前端固定展示10个格子, 后端返回数组

[
    {
        data: "xxx"
    },
    {
        data: "xxx"
    },
    {
        data: "xxx"
    }
    ...
]

前端按顺序依次填充即可

1年前 评论

如果是我,我会考虑建个关系表就好,比如

Users 
-id
-name

Bag
-id
-user_id
-count

item
-id
-name
-bag_id

把东西加入背包时,就检查一下count 是否已到达9个,如果满了就显示不能放入
你想每次把东西移入移出时,去加减bag.count
还是想每次放入时再count一下总数来判断都行,看你自己习惯

这样不用考虑遍历的问题,我想也是算常见的方法吧?

1年前 评论
godruoyi

如果只需要判断背包里有没有物品,不存储其他额外的信息的话,位模式是一个很好的选择。

假设表是这样设计的:id, user_id, host, package

const ONE = 0b100000000; // 一号格子有数据,定义长度为 9 的二进制,1 代表当前格子有数据
const TWO = ONE >> 1; // 二号格子有数据
...
const NINE = ONE >> 8; // 九号格子有数据

// 1. fetch `package` from database
$package = auth()->user()->packageRelation->package;

// 2. check current location has data, if you want check location 2, example:
if ($package & self::TWO) {
    // Data is already available for this location.
}

// 3. If you want to set the 2、9 position to have data, you can do this:
auth()->user()->packageRelation->fill([
    'package' => $package | self::TWO | self::NINE,
])->save();
1年前 评论

产品突然要加一个可以扩展用户背包的功能咋办

1年前 评论
萧晔离

users表里加个json格式字段?如果后面需要扩展背包格子也比较方便

1年前 评论
chowjiawei

mysql使用text 或者string 在laravel内 插入 以数组形式插入 显示写个方法 调用即可

1年前 评论
AegisforPhP (楼主) 1年前
chowjiawei (作者) 1年前

表格式就不对,肯定要用关联表啊

1年前 评论
Junwind

存json,一个字段即可, id , userinfo , bag

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!