完全重置 Laravel 5 迁移的东西?
Posted
技术标签:
【中文标题】完全重置 Laravel 5 迁移的东西?【英文标题】:Completely Reseting Laravel 5 Migration Stuff? 【发布时间】:2015-06-03 00:45:18 【问题描述】:长话短说,我在本地机器上完全搞砸了 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 composer dump-autoload”,您只需要在 composer 自动加载的情况下使用“composer dump-autoload” 【参考方案1】:试试这个:
composer dump-autoload
composer clear-cache
【讨论】:
为什么?请在您的代码中添加一些解释,尤其是因为其他答案看起来完全不同 我在其他回复中看到并为我工作,我不确定哪些文件完全清理但它有效。【参考方案2】:虽然@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
-extended 模型 (App\Project
) 正在寻找一张桌子那根本就不存在了。
故事的寓意:Laravel 超级复杂,我很烂,无论我尝试多少次遵循伟大的杰弗里之道的教义,我都将永远是一个 Laran00b。
【讨论】:
【参考方案3】:我喜欢做的是使用您在设备上使用的任何工具手动删除所有表格。对我来说,我只使用 phpmyadmin。之后我会这样做。
php artisan migrate:install
php artisan migrate:refresh
不知道这是否是官方的方式,但每次都有效。
如果你不想使用 phpmyadmin 你可以 通过命令行登录mysql
mysql -u root -p
DROP DATABASE laraveldb;
CREATE DATABASE laraveldb;
【讨论】:
它对我有用!!无论如何,有官方文档的备份会很棒,所以我可以依靠这个方法:)以上是关于完全重置 Laravel 5 迁移的东西?的主要内容,如果未能解决你的问题,请参考以下文章