Laravel集成waavi/translation执行迁移报错的解决方法
问题描述
我有一个集成了waavi/translation模块的Laravel项目,数据库为全新状态,无任何数据表。执行迁移命令:
php artisan migrate
时出现如下错误:
In Connection.php line 712:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'abc.ai_translator_translations' doesn't exist (SQL: select * from
ai_translator_translationswherelocale= pl andnamespace= * andgroup= *)In Exception.php line 18:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'abc.ai_translator_translations' doesn't exist
In PDOConnection.php line 82:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'abc.ai_translator_translations' doesn't exist
尝试单独执行该模块的迁移命令:
php artisan migrate --path=./modules/translation/database/migrations
仍出现相同错误,陷入无法执行模块迁移的死循环。
解决方案
1. 临时禁用模块服务提供者
打开config/app.php,找到waavi/translation对应的服务提供者(通常是Waavi\Translation\TranslationServiceProvider::class),将这一行注释掉。这样Laravel启动时不会加载该模块的服务,避免迁移前触发不存在表的查询。
2. 执行模块迁移
此时运行指定路径的迁移命令:
php artisan migrate --path=./modules/translation/database/migrations
由于模块服务未加载,不会触发预查询,迁移将正常执行并创建所需数据表。
3. 恢复服务提供者
迁移完成后,取消config/app.php中服务提供者的注释,恢复模块的正常加载。
4. 清除配置缓存(可选)
如果之前生成过配置缓存,执行以下命令清除:
php artisan config:clear
补充排查点
- 确认模块迁移文件确实存在于
./modules/translation/database/migrations路径下,若路径不符,调整命令中的路径参数。 - 检查
.env文件中的数据库配置,确保连接的是目标数据库abc。
内容的提问来源于stack exchange,提问作者Simon

