我不小心删除了数据库迁移表,并且必须回滚所做的更改。最终失败。加载项目视图时,出现以下错误。
Connection.php 669行中的QueryException:SQLSTATE [42S02]:未找到基表或视图:1146表'ushop.items'不存在(SQL:select * from
items
)
in Connection.php line 669
at Connection->runQueryCallback('select * from `items`', array(), object(Closure)) in Connection.php line 629
at Connection->run('select * from `items`', array(), object(Closure)) in Connection.php line 342
at Connection->select('select * from `items`', array(), true) in Builder.php line 1461
at Builder->runSelect() in Builder.php line 1447
at Builder->get(array('*')) in Builder.php line 569
at Builder->getModels(array('*')) in Builder.php line 303
at Builder->get(array('*')) in Model.php line 646
at Model::all() in ItemController.php line 15
at ItemController->index()
at call_user_func_array(array(object(ItemController), 'index'), array()) in Controller.php line 80
at Controller->callAction('index', array()) in ControllerDispatcher.php line 146
at ControllerDispatcher->call(object(ItemController), object(Route), 'index') in ControllerDispatcher.php line 94
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96
at ControllerDispatcher->callWithinStack(object(ItemController), object(Route), object(Request), 'index') in ControllerDispatcher.php line 54
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\ItemController', 'index') in Route.php line 174
at Route->runController(object(Request)) in Route.php line 140
at Route->run(object(Request)) in Router.php line 724
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Router.php line 726
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 54
at require_once('/home/thomas/ushop/public/index.php') in server.php line 21
我做了一些研究,发现了这一点,在运行作曲家dump-autoload时得到了以下信息
PHP致命错误:在第336行的/home/thomas/ushop/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php中找不到类'Item'
[Symfony \ Component \ Debug \ Exception \ FatalErrorException]
找不到类'Item'
我希望这个问题之前没有得到解答,但是到目前为止我还没有很多运气。
这是因为您已手动删除了数据库中的表,所以现在该表不可用,但是当您尝试回滚时,框架会尝试撤消迁移,因此它将在您手动删除的数据库中查找该表因此会发生错误。为什么要查找该表,因为在迁移文件的down方法中您具有以下内容:
Schema::drop('table_name');
因此,它尝试从数据库中删除已删除的表,但找不到它,并且在迁移表中为已迁移的每个表都有一条记录,因此您可以手动删除所有表并从头开始迁移或禁用在down
当你回滚(通过评论drop语句)方法暂时这样下来方法什么也不做,移民文件。如果您禁用该down
方法,请暂时重新启用该down
方法。这是解决问题的一种简单方法。
或者,可以down
通过检查是否table
存在drop
,在每个迁移文件中或在已删除表的迁移文件中的方法中添加一个检查,例如:
public function down()
{
if (Schema::hasTable('table_name')) {
Schema::drop('table_name');
}
}
希望你有这个主意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句