7

长话短说,我在本地机器上完全搞砸了 Laravel 迁移。它们是 100% 无法使用的。

我是第一次使用 Laravel 5,所以我只是在弄乱一些东西并试水,可以这么说。在手动修改数据库、重写我的迁移、意外删除一两个表(然后是“迁移”表本身 [doh!])之间,我处于这种混乱状态,我只想启动所有从头开始迁移东西。但是,我似乎无法弄清楚如何做到这一点。

我现在陷入了无能为力的状态

例如,当我执行时,如果旧表的任何残余仍在数据库中php artisan migrate:refresh,我会收到一条Base table or view already exists错误消息。但是,如果我删除所有表,我会收到此错误:

Next exception 'Illuminate\Database\QueryException' with message
'SQLSTATE[42S02]: Base table or view not found: 1146 Table
'bsd_status.projects' doesn't exist (SQL: select * from `projects`)' in 
path/to/src/Illuminate/Database/Connection.php:620

我已经运行了以下命令:

$ php artisan clear-compiled
$ php artisan cache:clear
$ php composer dump-autoload
$ php artisan migrate:install

我什至不确定我是否以正确的顺序做这些事情。无论如何,除了完全重新安装 Laravel 之外,如何让他/她的所有迁移回到“开箱即用”的状态?任何帮助将不胜感激。谢谢!

4

3 回答 3

11

我喜欢做的是使用您在设备上使用的任何工具手动删除所有表格。对我来说,我只使用 phpmyadmin。在那之后我做。

php artisan migrate:install
php artisan migrate:refresh

不知道这是否是官方方式,但每次都有效。

如果您不想使用 phpmyadmin,您可以通过命令行登录 mysql

mysql -u root -p
DROP DATABASE laraveldb;
CREATE DATABASE laraveldb;
于 2015-03-30T05:31:38.190 回答
4

尽管@Goddard 的回答和@nozzleman 的评论都非常有帮助(我已经多次使用这两个建议,所以谢谢),但该解决方案与迁移无关。好吧,……除了我一开始就把他们搞砸了。

无论如何,我没有解决这个问题,所以我戴上了“认真思考”的帽子。咒骂了几分钟后,我意识到了什么。似乎——即使只是artisan从命令行运行——我设置的任何路由或提供程序都试图被“解析”(或任何适当的术语)。因此,当应用程序启动 bootstrap/init/start/run 阶段时,我一定在某处尝试从丢失的表中获取数据。

我决定确保我的实际代码中没有发生任何奇怪的事情,所以我检查了我的路由文件(app/Http/routes.php)和我所有的服务提供者文件(app/Providers/*)看看我是否试图在其中任何一个中检索模型数据。瞧,我打开 app/Providers/AppServiceProvider.php 发现了这个:

AppServiceProvider.php

public function boot()
{
    $layout = 'default';

    if ( Request::has('layout') ) {
        $layout = Request::input('layout');
    }

    view()->share('sharedAppData', [
        'layout' => $layout,
        'projects' => App\Project::all() // <- WTF, mate?
    ]);
}

如果您还记得,错误消息中所抱怨的表被命名为“项目”。因此,我试图在启动时获取所有项目,所以无论我做什么(在命令行或其他方式),都不会起作用,因为我的扩展Eloquent模型(App\Project)正在寻找一个根本不存在的表了。

故事的寓意:Laravel 超级复杂,我很烂,无论我多少次尝试遵循伟大的 Jeffery Way 的教义,我都将永远是一个 Laran00b。

于 2015-04-18T18:12:27.250 回答
0

尝试这个:

 composer dump-autoload
 composer clear-cache
于 2019-03-15T11:11:26.780 回答