[扩展推荐] Spatie 出品的多租户 Laravel 扩展包

Laravel

多租户系统是那些需要在一套后端程序上同时维护多个客户的 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, 2020

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

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

  1. 判断当前是哪个租户。
  2. 租户配置的级联更改。
  3. 创建新租户数据库,并在租户间的数据迁移工具。

详细介绍以及使用方法请看具体文档: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

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

我是来拆台的,laravel多租户系统,推荐使用github.com/stancl/tenancy :smirk:

3年前 评论

我是来拆台的,laravel多租户系统,推荐使用github.com/stancl/tenancy :smirk:

3年前 评论
萧晔离

先插个眼

3年前 评论
Marrigan

@萧晔离 信不信给你排掉 :joy:

file

3年前 评论
萧晔离 3年前
No_Panic

// Determine if there is a current tenant

// 确定租户是否有客户

是不是翻译成 确认当前是否有租户 好一些.

3年前 评论
Marrigan 3年前

@xiaogui 作者看过这些,觉得这些太重了。

If you expect more features out of a multitenancy package, take a look at these excellent alternatives:

hyn/multi-tenant
stancl/tenancy
gecche/laravel-multidomain
romegadigital/multitenancy

3年前 评论
91it 3年前

@91hero 这个包 怎么在API里用啊大哥

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!