gamerwalt / laramultidbtenant

此包用于创建和管理Laravel多租户应用,并为每个租户创建和迁移多个数据库

2.1.5.x-dev 2019-05-31 22:36 UTC

README

Build Status

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

未来

  1. 对代码进行一些清理。
  2. 创建模板和租户迁移文件的命令
  3. 迁移到模板数据库的命令
  4. 同步新迁移文件的命令(已完成)
  5. 将模板数据库中所需的所有数据复制到所有租户数据库的命令
  6. 添加测试