takeshiyu/tenantify

Tenantify 是一个 Laravel 扩展包,旨在使实现多租户架构变得简单高效。使用 Tenantify,您可以快速设置应用程序以支持多个租户,每个租户使用单个数据库,并通过唯一的子域名进行识别。

v1.0.2 2023-04-23 10:30 UTC

This package is auto-updated.

Last update: 2024-09-23 14:02:52 UTC


README

GitHub Workflow Status GitHub Latest Version Total Downloads

Tenantify 是一个 Laravel 扩展包,旨在使实现轻量级多租户架构变得简单高效。使用 Tenantify,您可以快速设置应用程序以支持多个租户,每个租户使用 单个数据库,并通过 唯一子域名 进行识别。

功能

  • 自动子域名检测和租户解析
  • 基于子域名的路由,使用 Laravel 路由宏
  • 租户感知查询作用域
  • 租户上下文和数据隔离的中间件

安装

要安装 Tenantify,请按照以下简单步骤操作

  1. 通过 Composer 安装包
composer require takeshiyu/tenantify
  1. 发布配置文件和模型
php artisan vendor:publish --provider="TakeshiYu\Tenantify\TenantifyServiceProvider"

配置

安装 Tenantify 后,您可以根据应用程序的需求进行配置。打开 config/tenantify.php 文件并根据需要进行调整

return [
    'tenant_domain' => 'tenantify.test',
    'tenant_model' => App\Models\Tenant::class,
    'tenant_column' => 'slug',
    'tenant_key' => 'tenant_id',
];

自定义模型

默认情况下,Tenantify 使用 App\Models\Tenant(在 config/tenantify.php 中配置)作为租户模型,但您可以根据应用程序的需求调整默认模型。请确保在您的模型中使用 TakeshiYu\Tenantify\Concerns\Tenantable 特性。

use TakeshiYu\Tenantify\Concerns\Tenantable;

class YourTenantModel extends Model
{
    use Tenantable;
}

查询作用域

为了正确作用查询,请在您的模型上应用 TakeshiYu\Tenantify\Concerns\HasTenancy 特性

use TakeshiYu\Tenantify\Concerns\HasTenancy;

class YourModel extends Model
{
    use HasTenancy;
}

使用

routes/web.php 文件中,使用 tenancy 宏定义您的租户特定路由

Route::tenancy(function () {
    // your tenant routes here ...
});

或将 TakeshiYu\Tenantify\Middleware\ResolveTenant 中间件分配给您的路由或组

Route::get('/', fn () => 'ok')->middleware('tenantify.resolve');

当前租户

有几种方法可以处理当前租户

use TakeshiYu\Tenantify\Tenancy;

Tenancy::tenant();  // returns current tenant instance
Tenancy::id();      // returns current tenant id
Tenancy::slug();    // returns current tenant slug

如果没有找到租户,它将抛出 TenancyNotInitializedException 异常。

测试

您可以运行包的测试

composer test

许可证

Tenantify 是开源软件,使用 MIT 许可证 许可。