laravel - php artisan迁移失败

时间:2016-04-17 22:38:48

标签: php symfony laravel

我意外删除了数据库迁移表,我必须回滚我的更改。这最终失败了。当我加载项目视图时,我收到以下错误。

  

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

ř 我做了一些研究,我找到this,运行composer dump-autoload后得到以下内容

  

PHP致命错误:类'项目'在第336行的/home/thomas/ushop/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php中找不到

[Symfony的\元器件\调试\异常\ FatalErrorException]
  课程'项目'找不到

我希望这个问题以前没有得到解答,但到目前为止我没有太多运气。

1 个答案:

答案 0 :(得分:2)

这是因为您已经手动删除了数据库中的表,所以现在该表在那里不可用,但是当您尝试回滚框架trys以撤消迁移时,它会查找您已手动删除数据库中的表,以便发生错误。为什么它会查找表格,因为在您的迁移文件的down方法中,您有类似这样的内容:

Schema::drop('table_name');

因此,它试图从数据库中删除已删除的表,但它无法找到并且在您的迁移表中,您已迁移的每个表都有一条记录,因此您可以手动删除所有表并从头开始迁移或暂时禁用down(通过注释drop语句)方法,以便在回滚时,该方法在该迁移文件中不执行任何操作。如果您禁用down方法,则会暂时重新启用down方法。这是解决问题的黑客方式。

或者,您可以通过检查down是否存在然后table来检查每个迁移文件中的drop方法或仅删除已删除表格的迁移文件,例如:

public function down()
{
    if (Schema::hasTable('table_name')) {
        Schema::drop('table_name');
    }
}

希望你有这个主意。

相关问题