完全重新安装Laravel 5迁移的东西?

问题描述 投票:5回答:3

长话短说,我完全搞砸了我在本地机器上的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之外,如何将他/她的所有迁移恢复到“开箱即用”?任何帮助将不胜感激。谢谢!

php mysql laravel database-migration artisan
3个回答
7
投票

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

php artisan migrate:install
php artisan migrate:refresh

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

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

mysql -u root -p
DROP DATABASE laraveldb;
CREATE DATABASE laraveldb;

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?
    ]);
}

如果你还记得,在错误消息中被抱怨的表名为“projects”。因此,我试图让所有项目都处于启动状态,所以不管我做了什么(在命令行或其他方面),没有任何东西可以工作,因为我的Eloquent扩展模型(App\Project)正在寻找一个简单没有的表。 t再也存在了。

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


0
投票

试试这个:

 composer dump-autoload
 composer clear-cache
© www.soinside.com 2019 - 2024. All rights reserved.