如何在单一数据库中使用spatie/laraavel多租户



我想将我现有的应用程序转换为多租户,不想使用多个数据库。只要读到给定的包允许这样做。

https://github.com/spatie/laravel-multitenancy

我在这里阅读了单个数据库文档:https://spatie.be/docs/laravel-multitenancy/v2/installation/using-a-single-database

但下一步是什么??

假设现在用户正在存储到用户的表中,通过使用这个包,我想存储特定于租户的用户。

我在任何地方都找不到真正的例子。因此,如果有人已经通过使用单个数据库实现了Spatie多租户,请在这里帮助我。

提前谢谢。

尽管spatie/laravel多租户支持单个数据库,但它没有附带查询范围(而且似乎没有添加它们的计划,正如您在这里看到的:https://github.com/spatie/laravel-multitenancy/issues/124),因此您需要手动创建它们。

所以,你需要:

  • 将tenant_id添加到租户特定的表中
  • 在表中创建新寄存器时,添加一个observer来保存tenant_id
  • 添加全局查询范围以始终使用当前租户id筛选数据

您可以在此视频中看到类似的内容:https://www.youtube.com/watch?v=nCiNqboYFVQ

不同的是,您将使用spatie/laravel-multitenant返回的当前租户,而不是记录的用户id来获取租户数据。

如果您想要一个已经准备好使用查询范围的包,您可以尝试Tenancy for Laravel:https://tenancyforlaravel.com/docs/v3/single-database-tenancy

或者,如果你的应用程序有一个非常简单的多租户策略(例如,租户是登录的用户或他的团队(,你可以创建一些查询范围,而不需要使用包,就像上面的视频所教的那样,因为通过user_id或team_id来识别租户要简单得多,即使是在终端命令和队列作业中(但似乎不是这样,因为您需要用户属于租户(。

我希望它能帮助你为你的项目选择正确的包和策略。

最新更新