Laravel 8升级至9后出现Target class [db.schema]不存在错误求助
Laravel 8升级至9后「Target class [db.schema] does not exist」错误的原因与解决
错误原因
Laravel 9移除了容器中db.schema这个绑定项,而你的项目代码或第三方依赖中存在直接通过容器解析db.schema的逻辑(比如调用app('db.schema')或resolve('db.schema')),因此触发了绑定解析异常。该变更属于底层容器绑定的调整,未在升级指南中单独列出。
解决方法
- 替换所有直接调用
db.schema的代码,改用Laravel官方推荐的DB::getSchemaBuilder()方法获取Schema构建器实例,该写法同时兼容Laravel 8和9版本。 - 排查项目自定义代码、服务提供者及第三方依赖,定位所有使用
app('db.schema')的位置并替换。 - 若问题由未适配Laravel 9的第三方依赖导致,可先检查该依赖是否有更新版本;若无适配版本,可临时在
AppServiceProvider的register方法中添加兼容绑定(仅作过渡使用,建议后续替换为标准写法):
public function register() { $this->app->bind('db.schema', function ($app) { return $app['db']->getSchemaBuilder(); }); }
内容的提问来源于stack exchange,提问作者Ossy
相关产品推荐
相关产品推荐

