首页 > 解决方案 > 如何将 spatie / laravel-multitenancy 与单个数据库一起使用?

问题描述

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

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

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

但是接下来呢??

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

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

提前致谢。

标签: laravelmulti-tenant

解决方案


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

因此,您需要:

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

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

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

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

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

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


推荐阅读