orchestra / tenanti
Laravel 的基于租户的数据库模式管理器
Requires
- php: ^7.3 || ^8.0
- illuminate/console: ^8.40
- illuminate/filesystem: ^8.40
- illuminate/support: ^8.40
- orchestra/model: ^6.0
- orchestra/support: ^6.1
Requires (Dev)
- laravel/tinker: ^2.5
- nunomaduro/larastan: ^0.7.12
- orchestra/canvas: ^6.1
- orchestra/testbench: ^6.17
- dev-master / 7.0.x-dev
- 6.x-dev
- v6.3.0
- v6.2.0
- v6.1.0
- v6.0.0
- 5.x-dev
- v5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- 4.x-dev
- v4.1.0
- v4.0.0
- 3.8.x-dev
- v3.8.3
- v3.8.2
- v3.8.1
- v3.8.0
- 3.7.x-dev
- v3.7.1
- v3.7.0
- 3.6.x-dev
- v3.6.6
- v3.6.5
- v3.6.4
- v3.6.3
- v3.6.2
- v3.6.1
- v3.6.0
- 3.5.x-dev
- v3.5.2
- v3.5.1
- v3.5.0
- v3.5.0-BETA1
- 3.4.x-dev
- v3.4.2
- v3.4.1
- v3.4.0
- v3.4.0-BETA3
- v3.4.0-BETA2
- v3.4.0-BETA1
- 3.3.x-dev
- v3.3.5
- v3.3.4
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- v3.3.0-BETA1
- 3.2.x-dev
- v3.2.9
- v3.2.8
- v3.2.7
- v3.2.6
- v3.2.5
- v3.2.4
- v3.2.3
- v3.2.2
- v3.2.1
- v3.2.0
- v3.2.0-BETA1
- 3.1.x-dev
- v3.1.10
- v3.1.9
- v3.1.8
- v3.1.7
- v3.1.6
- v3.1.5
- v3.1.4
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
- 3.0.x-dev
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
This package is auto-updated.
Last update: 2024-09-22 05:55:11 UTC
README
Tenanti 允许您管理 Laravel 应用程序的多租户数据模式和迁移管理器。
版本兼容性
安装
要通过 composer 安装,请在终端中运行以下命令
composer require "orchestra/tenanti"
配置
接下来,在 config/app.php
中添加以下服务提供者。
'providers' => [ // ... Orchestra\Tenanti\TenantiServiceProvider::class, Orchestra\Tenanti\CommandServiceProvider::class, ],
命令实用程序是通过
Orchestra\Tenanti\CommandServiceProvider
启用的。
别名
为了使开发更加容易,您可以添加 Orchestra\Support\Facades\Tenanti
别名以方便引用。
'aliases' => [ 'Tenanti' => Orchestra\Support\Facades\Tenanti::class, ],
发布配置
为了更容易配置您的租户设置,请发布配置
php artisan vendor:publish
用法
为单数据库配置租户驱动程序
打开 config/orchestra/tenanti.php
并自定义驱动程序。
<?php return [ 'drivers' => [ 'user' => [ 'model' => App\User::class, 'paths' => [ database_path('tenanti/user'), ], 'shared' => true, ], ], ];
您可以在配置中自定义或添加新的驱动程序。请注意,model
配置仅与 Eloquent
实例一起使用。
设置迁移自动加载
对于每个驱动程序,您还应考虑将迁移路径添加到自动加载(如果尚未定义)。为此,您可以编辑您的 composer.json
。
composer.json
{ "autoload": { "classmap": [ "database/tenant/users" ] } }
设置租户模型
现在我们已经设置了配置,让我们向我们的 User
类添加一个观察者
<?php namespace App; use App\Observers\UserObserver; use Orchestra\Tenanti\Tenantor; use Illuminate\Notifications\Notifiable; use Orchestra\Tenanti\Contracts\TenantProvider; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable implements TenantProvider { use Notifiable; /** * Convert to tenantor. * * @return \Orchestra\Tenanti\Tenantor */ public function asTenantor(): Tenantor { return Tenantor::fromEloquent('user', $this); } /** * Make a tenantor. * * @return \Orchestra\Tenanti\Tenantor */ public static function makeTenantor($key, $connection = null): Tenantor { return Tenantor::make( 'user', $key, $connection ?: (new static())->getConnectionName() ); } /** * The "booting" method of the model. */ protected static function boot() { parent::boot(); static::observe(new UserObserver); } }
并且您的 App\Observers\UserObserver
类应包含以下内容
<?php namespace App\Observers; use Orchestra\Tenanti\Observer; class UserObserver extends Observer { public function getDriverName() { return 'user'; } }
控制台支持
Tenanti 包含额外的命令,帮助您在创建新模式时运行批量迁移,这些命令的使用方法类似于 php artisan migrate
命名空间中的用法。
多数据库连接设置
您也可以为每个租户设置数据库连接,而不是使用 Tenanti 与单个数据库连接。
为多数据库配置租户驱动程序
打开 config/orchestra/tenanti.php
并自定义驱动程序。
<?php return [ 'drivers' => [ 'user' => [ 'model' => App\User::class, 'paths' => [ database_path('tenanti/user'), ], 'shared' => false, ], ], ];
通过引入 migration
配置,您现在可以将迁移表名设置为 tenant_migrations
而不是 user_{id}_migrations
。
数据库连接解析器
为了使 Tenanti 能够自动解析您的多个数据库连接,我们需要设置解析器。您可以通过以下方式完成此操作
<?php namespace App\Providers; use Orchestra\Support\Facades\Tenanti; class AppServiceProvider extends ServiceProvider { public function boot() { Tenanti::connection('tenants', function (User $entity, array $config) { $config['database'] = "acme_{$entity->getKey()}"; // refer to config under `database.connections.tenants.*`. return $config; }); } }
在幕后,$config
将包含从 "database.connections.tenants"
(根据第一个参数 tenants
)获取的模板数据库配置。我们可以动态地修改连接配置,并返回更新后的配置,供租户使用。
设置默认数据库连接
或者,您也可以使用 Tenanti 为您的应用程序设置默认数据库连接
use App\User; use Orchestra\Support\Facades\Tenanti; // ... $user = User::find(5); Tenanti::driver('user')->asDefaultConnection($user, 'tenants_{id}');
通常,这将在中间件类中使用,当您根据
Illuminate\Http\Request
对象解析租户 ID 时。