rndwiga/laravel-multi-db-tenant

此软件包用于创建和管理 Laravel 多租户应用

1.0.0 2017-02-01 22:54 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:49:38 UTC


README

Build Status

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

未来

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