【问题标题】:laravel - php artisan migrate failslaravel - php artisan migrate 失败
【发布时间】:2016-08-09 13:02:03
【问题描述】:

我不小心删除了一个数据库迁移表,我必须回滚我的更改。这最终失败了。当我加载项目视图时,出现以下错误。

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

r 我做了一些研究,发现 this 并在运行 composer dump-autoload 时得到以下信息

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

[Symfony\Component\Debug\Exception\FatalErrorException]
找不到类“项目”

我希望以前没有人回答过这个问题,但到目前为止我运气不佳。

【问题讨论】:

    标签: php symfony laravel


    【解决方案1】:

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

    Schema::drop('table_name');
    

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

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

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

    希望你明白了。

    【讨论】:

    • 感谢您的帮助!
    • 对不起,我一定是不小心点击了。
    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 2015-04-26
    • 2020-05-01
    • 2016-05-14
    • 2016-11-24
    • 2020-10-23
    • 2018-08-04
    • 2017-04-06
    相关资源
    最近更新 更多