我正在开发一个多租户laravel应用程序,并且遇到了hyn \ multi-tenant软件包的问题。 hyn \ multi-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),
        ],

    ],

];

最佳答案

这个问题原来是我的应用程序中的逻辑错误,而不是数据库配置问题。由于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


错误。

关于laravel - Laravel Hyn\Multi-Tenant数据库[租户]未配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52619940/

10-09 20:45