如何使用 Laravel 构建多商户市场
构建市场是一个数据问题。
大多数开发者认为难点在于卖家仪表板。其实不然。真正的挑战在于多租户(multi-tenancy)架构。你必须确保每一个查询都在回答同一个问题:谁拥有这些数据?
如果你先构建一个标准商店,以后再尝试添加供应商,你将面临重写的困境。你必须在每个模型、每个查询和每个购物车中都穿插供应商 ID。如果你漏掉了一个过滤器,一个卖家就会看到另一个卖家的订单。这就是数据泄露。
你有三个选择:
- 自己构建:你需要编写每一个作用域子句(scoping clause)。这既昂贵又充满风险。
- 使用带有插件的单租户商店:你将供应商列强行嫁接到一个并非为此设计的架构上。隔离性依然脆弱。
- 使用多租户基础架构:使用像 Aimeos 这样的包,从第一天起就将隔离机制构建在数据模型中。
以下是如何使用 Aimeos 将单体商店转变为多商户市场的方法:
1. 安装基础架构
运行此命令开始:
composer create-project aimeos/aimeos myshop
2. 启用多商户模式
你不需要重写数据库。只需在 .env 文件中更改一行:
SHOP_MULTISHOP=true
此标志会自动将每个路由、API 和管理面板的作用域限定到特定站点。系统会为你处理数据隔离。
3. 启用自助入驻
为了实现规模化,让供应商自行注册。在 .env 中添加:
SHOP_REGISTRATION=true
新卖家只能访问他们自己的商品目录、订单和客户。他们无法看到任何其他内容。
为什么这种方法有效:
Aimeos 将一切围绕“站点(site)”进行组织。每个产品、价格和订单都携带一个站点 ID。数据层会自动进行过滤。你不需要编写 where site_id = ?,因为系统已经为你做好了。
这种方法解决了三个主要问题:
- 安全性:数据隔离是数据库的一种属性,而不是一段你可能会忘记写的代码。
- 复杂性:供应商可以管理复杂的商品(如订阅或捆绑包),而无需你更改架构。
- 支付:你可以使用 Stripe 等扩展来实现即时分账。平台抽取佣金,卖家获得剩余部分。
不要再忙于构建底层基础设施了。开始构建你的市场吧。
Source: https://dev.to/aimeos/how-to-implement-a-multi-vendor-e-commerce-marketplace-397a
