Laravel扩展推荐:多租户扩展包 “multitenancy”

发布时间 - 2022-10-10 00:00:00    点击率:

多租户系统是那些需要在一套后端程序上同时维护多个客户的 web 开发者的福音。

 Spatie 发布的一个 Laravel 的扩展 multitenancy ,该扩展主要帮助您快速搭建多租户系统:

laravel-multitenancy 扩展发布地址:t.co/q9HzfkNw7w该扩展理念是提供您实现多租户的基本要素。文档: t.co/zspuLyt3KN视频演示 (案例): t.co/i3QzTezcuY pic.twitter.com/cy2Fk4tIe6— Freek Van der Herten (@freekmurze) May 20, 2025

根据 Freek Van der Herten 的介绍文章:introductory post,可以了解到该扩展仅仅是提供用户实现多租户系统的基本要素。

你可以从该扩展获取以下便利:

  • 判断当前是哪个租户。

  • 租户配置的级联更改。

  • 创建新租户数据库,并在租户间的数据迁移工具。

详细介绍以及使用方法请看具体文档:laravel-multitenancy documenation.

租户模型

该扩展的核心是: Tenant 模型,该模型用于租户实例的创建,您可以通过该扩展提供的一些遍历方法快速使用和访问当前租户。

use Spatie\Multitenancy\Models\Tenant;

// 获取当前租户,不存在返回 null
Tenant::current()

// 通过容器的方式获取当前租户
app('currentTenant');

// 确认当前是否有租户
Tenant::checkCurrent()

// 将某个租户设置为当前租户
$tenant->makeCurrent();

// 忘记当前租户
Tenant::forgetCurrent();

查询租户客户

在安装该扩展之后,在数据库中你会发现 tenants 数据表,该表用于存储租户信息。该扩展实现了一些便利的方法,包括通过域名来确定当前租户,其中 DomainTenantFinder 类,就是用于查询并设置当前租户。当然,你也可以配置自定义查询方式,只要实现 TenantFinder 抽象类即可。

在查找租户时您可能还需要考虑一些必要判定。该扩展提供了一些租户判定的中间件,比如根据入参来确定并设置当前所属租户的中间件 NeedsTenant,以及防止非当前租户的用户访问的 EnsureValidTenantSession 全局中间件。

Tenant-Aware 控制台和队列

多租户系统还需要考虑的问题就是:控制台命令和队列范围的界定。默认情况下,队列的执行与否是不会会根据租户来做区分的,该扩展中,您可以通过配置 TenantAwareNotTenantAware 参数来实现特定租户可以使用特定队列的需求。

当然,您也可以通过 tenants:artisan 命令来实现在特定租户下执行迁移的需求,案例如下:

# 所有租户执行迁移
php artisan tenants:artisan migrate

# 特定租户执行迁移
php artisan tenants:artisan "migrate --seed" --tenant=123

## 更多知识

关于扩展的使用以及安装,请阅读 spatie/laravel-multitenancy.

想要了解更多细节请阅读 Freek’s post。

原文地址:https://laravel-news.com/spatie-multitenancy-laravel

译文地址:https://learnku.com/laravel/t/45142

【相关推荐:laravel视频教程】


# php  # laravel  # 您可以  # 还需要  # 来实现  # 文档  # 你可以  # 多个  # 遍历  # 并在  # 可以通过  # 不存在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 深圳网站制作培训,深圳哪些招聘网站比较好?  Laravel如何实现API资源集合?(Resource Collection教程)  如何快速打造个性化非模板自助建站?  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Laravel如何实现多对多模型关联?(Eloquent教程)  如何在企业微信快速生成手机电脑官网?  详解CentOS6.5 安装 MySQL5.1.71的方法  如何在阿里云完成域名注册与建站?  如何快速生成橙子建站落地页链接?  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  制作公司内部网站有哪些,内网如何建网站?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  黑客入侵网站服务器的常见手法有哪些?  Android实现代码画虚线边框背景效果  Python文本处理实践_日志清洗解析【指导】  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  微信小程序 五星评分(包括半颗星评分)实例代码  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何在Windows服务器上快速搭建网站?  Android自定义控件实现温度旋转按钮效果  Linux系统运维自动化项目教程_Ansible批量管理实战  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel如何创建自定义Artisan命令?(代码示例)  如何在Tomcat中配置并部署网站项目?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  进行网站优化必须要坚持的四大原则  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何在服务器上配置二级域名建站?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  如何用西部建站助手快速创建专业网站?  使用Dockerfile构建java web环境  Laravel如何使用Collections进行数据处理?(实用方法示例)  如何彻底卸载建站之星软件?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Python文件异常处理策略_健壮性说明【指导】  如何确认建站备案号应放置的具体位置?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)