gamerwalt / laramultidbtenant
此包用于创建和管理Laravel多租户应用,并为每个租户创建和迁移多个数据库
Requires
- php: >=7.2
- illuminate/auth: >=5.8
- illuminate/config: >=5.8
- illuminate/console: >=5.8
- illuminate/database: >=5.8
- illuminate/session: >=5.8
- illuminate/support: >=5.8
- vlucas/phpdotenv: 3.3.3
Requires (Dev)
- phpunit/phpunit: 8.1.*
This package is auto-updated.
Last update: 2024-08-29 04:14:32 UTC
README
Laravel的多数据库租户包
此包旨在帮助Laravel应用程序处理多数据库租户应用。
使用此包的示例Laravel应用程序可以在GitHub找到
安装
composer require gamerwalt/laramultidbtenant
将服务提供者添加到config/app.php中的应用程序提供者数组中。也提供了一个门面,可以添加...
提供者
gamerwalt\LaraMultiDbTenant\LaraMultiDbTenantServiceProvider::class
门面
'LaraMultiTenantDB' => gamerwalt\LaraMultiDbTenant\LaraMultiTenantDB::class
配置文件
php artisan vendor:publish
这将把laramultidbtenant.php配置文件复制到app/config目录,以及复制所需的tenant、tenant_users和tenant_databases迁移文件。创建你的模型。
在你的.env文件中设置租户数据库
创建所需的模型类
这将创建Tenant、TenantDatabase、TenantUser模型。请确保提供正确的关系,并不要忘记在User、Tenant、TenantUser和TenantDatabase模型中创建关系,并设置连接属性。
php artisan tenant:basemodels
class Tenant extends Model
{
protected $connection = 'todo';
protected $table = 'tenants';
protected $primaryKey = 'tenant_id';
protected $fillable = ['tenant_uid', 'company_name', 'short_company_name', 'database_prefix', 'address'];
.......
创建模板、租户迁移文件夹以及租户公开文件夹
php artisan tenant:folders
此包在其服务提供者中注册了一个名为authTenant的中介。这对于自动设置应用程序模型的默认连接是必需的
对于待办事项应用程序,请参阅示例应用程序
在你的将控制特定租户路由的控制器中,将以下内容添加到__construct方法中
$this->middleware('auth');
$this->middleware('authTenant'); //This is automatically pushed to laravel's kernel
还确保包含特性,以便在租户注册公司后自动执行迁移...
use MigrateTenantDatabase;
完整的命名空间为...
use gamerwalt\LaraMultiDbTenant\Traits\MigrateTenantDatabase;
创建你的迁移文件
这假设你已经做了...
php artisan vendor:publish
因此,创建你的迁移文件...
php artisan make:migration create_todo_table --create=todos --path=database/migrations/tenant
你的TenantDatabase模型
这很重要
你的TenantDatabase模型必须实现ITenantDatabase接口
class TenantDatabase extends Model implements ITenantDatabase
完成之后,从注册用户开始,至少收集所需的信息。在你的注册用户、租户、租户数据库、租户用户的控制器中,你应该能够做...
$this->migrateTenantDatabase($tenantDatabase->hostname, $tenantDatabase->database_name, $tenantDatabase->user_name, $tenantDatabase->password);
使用此示例作为指南。请参阅SessionsController@postRegister。这应该显示代码...
$input = $request->all();
$email = $input['email'];
$password = $input['password'];
$name = $input['name'];
$companyName = $input['company_name'];
DB::beginTransaction();
$user = $this->registerUser($email, $password, $name);
$tenant = $this->registerTenant($companyName);
$tenantUser = $this->createTenantUserDetails($user, $tenant);
$tenantDatabase = $this->createTenantDatabase($tenant);
DB::commit();
//now we can migrate the database of the tenant using the tenant database settings
$this->migrateTenantDatabase($tenantDatabase->hostname, $tenantDatabase->database_name,
$tenantDatabase->user_name, $tenantDatabase->password);
使用迁移重新同步和更新表...
创建新的更新迁移文件
php artisan make:migration add_column_to_todo_table --table=todos --path=database/migrations/tenant
完成此操作后,运行以下命令
php artisan tenant:migrate-resync
每个用户多个租户
此包允许用户为每个用户拥有多个租户/公司。这意味着如果用户被注册或添加到2个租户,用户将能够选择他们想要登录的租户/公司。
问题
Twitter: @gamerwalt
未来
- 对代码进行一些清理。
- 创建模板和租户迁移文件的命令
- 迁移到模板数据库的命令
- 同步新迁移文件的命令(已完成)
- 将模板数据库中所需的所有数据复制到所有租户数据库的命令
- 添加测试