Laravel Hyn \ Multi-Tenant数据库[租户]未配置

时间:2018-10-03 04:56:27

标签: laravel multi-tenant

我正在开发一个多租户laravel应用程序,并且遇到了hyn \ multi-tenant软件包的问题。 hyn \ multi-tenant的文档指出,租户数据库连接将由程序包处理,并且只要系统连接可用并且用户具有添加和修改数据库的特权,程序包将处理所有租户数据库连接

尝试在我的应用程序中创建租户时,出现错误:未配置数据库[tenant]。

我在SO上已经看到了许多关于此问题的答案,但是它们都引用了Customer模型或localhost配置。 Hyn删除了Customer模型,并且在通过Laravel Forge发布的DigitalOcean服务器上也出现了我遇到的问题。

我将感谢所有能够提供帮助的人。

我的.env(本地)

APP_NAME="Multi-Tenant"
APP_ENV=local
APP_KEY=base64:j1aLzU7m5LWK1keo/FjgbtpwTpVZ1NBj29zuXIByHek=
APP_DEBUG=true
APP_URL_BASE=localhost:8888/lms/public
APP_URL=http://${APP_URL_BASE}

LOG_CHANNEL=stack

DB_CONNECTION=system
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=lmssystem
DB_USERNAME=lmssystem
DB_PASSWORD=lmssystem

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

LIMIT_UUID_LENGTH32=true

我的database.php

return [
'default' => env('DB_CONNECTION', 'system'),
'connections' => [

        'system' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '8889'),
            'database' => env('DB_DATABASE', 'lmssystem'),
            'username' => env('DB_USERNAME', 'lmssystem'),
            'password' => env('DB_PASSWORD', 'lmssystem'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => 'InnoDB',
        ],
    ],
 'migrations' => 'migrations',
'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ],

];

2 个答案:

答案 0 :(得分:1)

这个问题原来是我的应用程序中的逻辑错误,而不是数据库配置问题。由于Hyn \ Multi-Tenant软件包不再支持客户模型,因此我不得不偏离Ashok在中[[https://medium.com/@ashokgelal/a-full-featured-multi-tenant-app-with-laravel-part-1-4049a3cc229d][1]]上的文章。

在开发了自己的客户端模型并扩展了现有的Website和Hostname模型以与客户端模型进行交互之后,我不得不重新编写tenant:create命令。在这种情况下,我直接从扩展模型中创建了网站和主机名,而不是根据Hyn文档(在下面复制)通过存储库创建了

  

租借很大程度上受事件驱动。为了使事件侦听器正常工作,您必须使用存储库创建新的网站和主机名。   使用Hyn \ Tenancy \ Models \ Website;   使用Hyn \ Tenancy \ Contracts \ Repositories \ WebsiteRepository;

$website = new Website;
app(WebsiteRepository::class)->create($website);
dd($website->uuid); 

$hostname = new Hostname;
$hostname->fqdn = 'luceos.demo.app';
app(HostnameRepository::class)->attach($hostname, $website);

通过存储库创建解决了以下问题:

Database [tenant] not configured

错误。

答案 1 :(得分:0)

此代码可能可以解决您的问题

config / database.php:

'connections' => [

    'system' => [
        'driver' => env('DB_DRIVER', 'mysql'),
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'root'),
        'password' => env('DB_PASSWORD', '123'),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

    'tenant' => [
        'driver' => env('DB_DRIVER', 'mysql'),
        'host' => '',
        'port' => env('DB_PORT', '3306'),
        'database' => '',
        'username' => '',
        'password' => '',
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

],