dersam / laravel-multitenant
laravel的多租户服务提供者
Requires
- php: >=7.0.0
- laravel/framework: ^5.5
This package is auto-updated.
Last update: 2024-09-22 21:42:18 UTC
README
为Laravel提供简单的多租户服务提供者。每个租户将获得自己的数据库模式。它期望有一个独立的“核心”模式来管理应用程序的全局设置。
此服务不通过所有者列支持多租户,永远不会。
安装
安装包: composer require dersam/laravel-multitenant
运行迁移以在您的核心数据库中创建tenants数据库。 php artisan migrate
部署配置。 php artisan vendor:publish --provider="Dersam\Multitenant\ServiceProvider"
在config/database.php中添加一个“虚拟”配置。它应指向您想要包含租户模式的数据库,但不要指定数据库。这将是动态设置的。
'connections' => [
// The core database that contains global application tables.
'core' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
// A "dummy" database that will be pointed to the correct tenant on the fly.
'tenant' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
],
],
用法
服务提供者将被自动注册 - 它可以通过Dersam\Multitenant\TenantSwitcher注入。获取您的Tenant模型,并将其传递以切换tenant连接到您的数据库。在此示例中,假定User模型有一个tenant_id列,但此包将此决定权留给开发者。
$tenant = Tenant::find($user->tenant_id);
if ($tenant === null) {
return redirect('/');
}
$this->tenantSwitcher->switchGlobalTenant($tenant);
您可以使用Dersam\Multitenant\IsTenantModel特质指定某些模型始终使用租户连接。
namespace App\Models\Tenant;
use Dersam\Multitenant\IsTenantModel;
...
class ExampleModel extends Model
{
use IsTenantModel;
...
您可以通过将迁移放在database/migrations/tenant目录中来指定仅在租户数据库上运行的迁移。可以使用php artisan multitenant:migrate在所有租户上运行迁移,并使用php artisan multitenant:migrate:rollback回滚迁移。这些命令将读取tenants表并自动发现相关的租户数据库。每个租户维护自己的迁移表。