如何使用 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