如何将 spatie / laravel-multitenancy 与单个数据库一起使用?

Vis*_*iya 1 multi-tenant laravel

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

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

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

但接下来呢?

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

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

提前致谢。

小智 6

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

所以,你需要:

  • 将tenant_id添加到特定于租户的表中
  • 在表中创建新寄存器时添加观察者以保存tenant_id
  • 添加全局查询范围以始终使用当前租户 ID 过滤数据

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

不同之处在于,您将使用spatie/laravel-multitenancy返回的当前租户而不是记录的用户 ID 来获取租户数据。

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

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

我希望它可以帮助您为您的项目选择正确的包和策略。

  • 你好,感谢您告知我有关此软件包的信息,我也尝试过,但似乎也缺少文档。我已经创建了租户表并向用户表添加了相关特征。现在,在初始化租赁 i' 时,遇到错误。如果任何人都可以与给定的包共享单个数据库示例,那就更好了。谢谢 (2认同)
  • @tiago silva pereira,你的答案是正确的。对于使用单个数据库的多租户没有简单的答案,但您已经完美地总结了情况。 (2认同)