我正在开发一个多租户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),
],
],
];
答案 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,
],
],