protosofia / ben10ant
一个真正有用的 Laravel 多租户包,它是认真的,至少我在尽力
v1.0.6
2019-02-15 01:30 UTC
Requires
- laravel/framework: ^5.4
- webpatser/laravel-uuid: 3.*
README
一个真正有用的 Laravel 多租户包,它是认真的,至少我在尽力...
安装
composer require protosofia/ben10ant
配置
控制台命令配置
添加到 app/Console/Kernel.php
...
protected $commands = [
...
\Protosofia\Ben10ant\Commands\TenantCreate::class,
\Protosofia\Ben10ant\Commands\TenantMigrate::class,
\Protosofia\Ben10ant\Commands\TenantMigrateRefresh::class,
\Protosofia\Ben10ant\Commands\TenantMigrateRollback::class,
\Protosofia\Ben10ant\Commands\TenantSeed::class,
...
];
...
中间件配置
添加到 app/Http/Kernel.php
...
protected $middleware = [
...
\Protosofia\Ben10ant\Middlewares\CheckTenantByKey::class,
...
];
...
服务提供者配置
添加到 config/app.php
...
'providers' => [
...
\Protosofia\Ben10ant\Providers\TenantServiceProvider::class,
...
],
...
外观
添加到 config/app.php
...
'aliases' => [
...
'Tenant' => Protosofia\Ben10ant\Facades\TenantFacade::class,
...
],
...
模型
此包包含 3 种类型的模型
- Protosofia\Ben10ant\Models\TenantModel:此模型始终针对 主数据库,其中包含“租户”表;
- Protosofia\Ben10ant\Models\TenantBaseModel:此模型始终针对 当前租户数据库,换句话说,当前登录用户的租户;
- Protosofia\Ben10ant\Models\TenantAuthenticatableBaseModel:此模型与 TenantBaseModel 完全相同,但实现了 Illuminate\Foundation\Auth\User;
要管理“租户”表,可以创建以下模型
...
use Protosofia\Ben10ant\Models\TenantModel;
class Tenant extends TenantModel
{
//
}
要有一个租户用户(可验证的),可以创建以下模型
...
use Protosofia\Ben10ant\Models\TenantAuthenticatableBaseModel;
class User extends TenantAuthenticatableBaseModel
{
use Notifiable;
...
}
要处理租户数据(不可验证)的模型,可以创建以下模型
...
use Protosofia\Ben10ant\Models\TenantBaseModel;
class YourTenantTable extends TenantBaseModel
{
protected $table = 'your_tenant_table'; //optional
...
}
用法
配置
php artisan vendor:publish
这将发布配置文件。
控制台命令
创建新的租户
tenant:create {name} {keyname}
- name 租户名称。例如,'租户阿尔法';
- keyname 租户昵称,用于身份验证(类似于子域)。例如,'tenant-alpha';
此命令是一个租户创建向导,您可以配置数据库连接和存储。
在租户数据库上运行迁移
tenant:migrate {tenant} {--force} {--path} {--pretend} {--step}
- tenant 租户 keyname。例如,'tenant-alpha';
- --force 强制在生产环境中运行操作;
- --path 要执行的迁移文件路径。
- --pretend 输出将要运行的 SQL 查询。
- --step 强制迁移运行,以便可以单独回滚。
此命令是对 'migrate' 命令的间接调用,它自动设置租户连接。如果未定义路径选项,则假设默认路径:database/migrations/tenants。
刷新并运行租户数据库上的迁移
tenant:migrate:refresh {tenant} {--force} {--path} {--seed} {--seeder} {--step}
- tenant 租户 keyname。例如,'tenant-alpha';
- --force 强制在生产环境中运行操作;
- --path 要执行的迁移文件路径。
- --seed 表示是否应重新运行种子任务。
- --seeder 根种子类的名称。
- --step 要回滚并重新运行的迁移数量。
此命令是对 'migrate:refresh' 命令的间接调用,它自动设置租户连接。如果未定义路径选项,则假设默认路径:database/migrations/tenants。
在租户数据库上回滚迁移
tenant:migrate:rollback {tenant} {--force} {--path} {--seed} {--seeder} {--step}
- tenant 租户 keyname。例如,'tenant-alpha';
- --force 强制在生产环境中运行操作;
- --path 要执行的迁移文件路径。
- --pretend 输出将要运行的 SQL 查询。
- --step 要回滚的迁移数量。
此命令是对 'migrate:rollback' 命令的间接调用,它自动设置租户连接。如果未定义路径选项,则假设默认路径:database/migrations/tenants。
在租户数据库上播种
tenant:db:seed {tenant} {--force} {--class}
- tenant 租户 keyname。例如,'tenant-alpha';
- --force 强制在生产环境中运行操作;
- --class 根种子类的名称 [默认: "DatabaseSeeder"]
此命令是对 'db:seed' 命令的间接调用,它自动设置租户连接。如果未定义类选项,则假设默认类:DatabaseSeeder。
中间件
此包提供 3 个中间件
- Protosofia\Ben10ant\Middlewares\CheckTenantByID:从标题 TENANT 获取值并尝试匹配租户 pk 数据库记录;
- Protosofia\Ben10ant\Middlewares\CheckTenantByKey:从标题 TENANT 获取值并尝试匹配租户 keyname 数据库记录;
- Protosofia\Ben10ant\Middlewares\CheckTenantByUUID:从标题 TENANT 获取值并尝试匹配租户 uuid 数据库记录;
单例服务/外观
此服务是单例的,可以通过外观 Tenant 访问。例如
...
use Tenant;
$tenant = Tenant::setTenantByUUID($uuid);
if (!$tenant) {
return response()->json(['error' => 'No tenant found.'], 404);
}
...
此服务有 4 个方法来设置租户
- setTenantByID($id) - 通过 pk 设置租户;
- setTenantByUUID($uuid) - 通过UUID设置租户;
- setTenantByKey($key) - 通过键名设置租户;
- setTenant(TenantModelInterface $tenant) - 使用租户模型实例设置租户;
待办事项
- - 已完成
- - 已完成
- - 已完成
- - 已完成
- - 已完成
- - 已完成
- - 已完成
- - 已完成
- - 已完成
- - 已完成
- - 已完成