Tenancy for Laravel未识别租户数据库,登录时报错求助
问题场景
- 使用Tenancy for Laravel包,已创建测试租户
tenant1 - 访问租户域名
tenant1.localhost:8000/login时触发错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'academymanager.users' doesn't exist
推测系统未切换到租户数据库academymanager_tenant1,仍在使用主数据库academymanager,疑问数据库命名规范是否影响识别。
问题分析与解决方案
数据库命名规范通常不会直接导致租户数据库识别失败,Tenancy for Laravel默认支持自定义命名格式,问题大概率出在租户识别、数据库切换的配置或执行流程上,可按以下步骤排查:
检查租户识别中间件配置
确认TenancyMiddleware已正确注册到路由组或全局中间件中。打开app/Http/Kernel.php,检查是否在middlewareGroups或routeMiddleware中添加了租户相关中间件,确保请求进入时能自动识别租户并切换数据库。验证租户数据库初始化完整性
确认创建租户时已执行租户数据库迁移,确保academymanager_tenant1中存在users表。可手动登录数据库查看表结构,或重新运行租户迁移命令:php artisan tenancy:migrate核对数据库命名规则配置
若自定义了租户数据库命名格式,打开config/tenancy.php,检查database.connections.tenant.database的配置项,确保生成规则与实际创建的academymanager_tenant1一致(例如是否设置为academymanager_{tenant.slug}或academymanager_{tenant.id})。确认域名与租户的关联关系
检查租户tenant1的域名配置是否为tenant1.localhost,创建租户时是否正确绑定了该域名;同时确认tenancy.php中域名识别规则(如子域名匹配)是否配置正确。清理Laravel缓存
执行以下命令清理配置、路由缓存,避免旧配置干扰数据库切换逻辑:php artisan config:clear php artisan route:clear
内容的提问来源于stack exchange,提问作者Vince

