laravel - 如何将 spatie / laravel-multitenancy 与单个数据库一起使用?
问题描述
我想将我现有的应用程序转换为多租户并且不想使用多个数据库。只需阅读给定的软件包允许这样做。
https://github.com/spatie/laravel-multitenancy
我在这里阅读了单一数据库文档:https ://spatie.be/docs/laravel-multitenancy/v2/installation/using-a-single-database
但是接下来呢??
假设现在用户正在存储到用户的表中,并且通过使用这个包,我想存储特定于租户的用户。
我在任何地方都找不到真正的例子。如果有人已经使用单个数据库实现了 Spatie 多租户,那就更好了,请在这里帮助我。
提前致谢。
解决方案
尽管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 识别租户要简单得多,即使在终端命令和队列作业中也是如此(但似乎不是您的情况,因为您需要用户属于租户)。
我希望它可以帮助您为您的项目选择正确的包和策略。
推荐阅读
- c# - '@ate' c# 传递参数附近的语法不正确
- c# - 我应该使用什么扩展名来使用过程和 linq C# 从数据库中获取日期的值
- reactjs - 在 React 中使用附加状态方法设置收音机时遇到问题
- python - 在 Airflow2.0 中自动 Log cleanup dag 不起作用
- twisted - 在“Big Sur”下安装 Twisted 失败
- javascript - ReactJS输入范围错误无法阻止被动事件侦听器调用中的默认值
- java - 为什么 lambda 表达式的参数包含对象?
- binary - Java:二进制形式表示
- react-native - 如何再次更新 redux 状态?
- python - 相对于没有重复列的列转置数据框