rndwiga / laravel-multi-db-tenant
此软件包用于创建和管理 Laravel 多租户应用
Requires
- php: >=5.5.9
- illuminate/auth: ^5.3
- illuminate/config: ^5.3
- illuminate/console: ^5.3
- illuminate/database: ^5.3
- illuminate/session: ^5.3
- illuminate/support: ^5.3
- vlucas/phpdotenv: ^2.4
Requires (Dev)
- phpunit/phpunit: 4.0.*
This package is not auto-updated.
Last update: 2024-09-23 14:49:38 UTC
README
Laravel 多数据库租户软件包
此软件包旨在帮助 Laravel 应用实现多数据库租户应用。
可以使用此软件包的示例 Laravel 应用可从github找到
安装
composer require rndwiga\MultiTenant
将服务提供者添加到您的应用 providers 数组中 config/app.php。也提供 Facade,可以添加...
提供者
rndwiga\MultiTenant\LaraMultiDbTenantServiceProvider::class
外观
'LaraMultiDbTenant' => rndwiga\MultiTenant\Facade::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 rndwiga\MultiTenant\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);
问题
Twitter: @rndwiga254
未来
- 对代码进行一些清理。
- 创建模板和租户迁移文件的命令
- 迁移到模板数据库的命令
- 同步新迁移文件的命令
- 将任何所需数据从模板数据库复制到所有租户数据库的命令
- 添加测试