我工作的环境不是直接将更改部署到客户机服务器,而是从SVN修订版生成一个带有更改列表的构建tarball,并将其发送给他们的web团队。
问题是,我不允许做任何花哨的事情,只允许更改站点资产和原始查询,这意味着当我需要客户机对其暂存进行更改时,我不能要求客户机运行laravel迁移
因此,我希望能够在迁移运行时捕获原始SQL,从那里我可以准确地看到发生了什么变化,我可以告诉客户机“这是一个需要更改的SQL文件,请在应用更新时查看并运行它。”
作为一种不需要设置任何事件监听器的替代解决方案,您可以在运行命令时使用--ax
选项:
php artisan migrate --pretend
这将转储SQL将由迁移运行的查询,但实际上没有运行迁移。它将在每一行输出迁移的类名和从该迁移运行的查询,因此对于创建具有唯一的email
列的user
表的迁移,您将得到这样的结果:
CreateUsersTable: create table `users` (`id` int unsigned not null auto_increment primary key, `email` varchar(255) not null, `password` varchar(60) not null, `created_at` timestamp default 0 not null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci
CreateUsersTable: alter table `users` add unique users_email_unique(`email`)
从Laravel 4到Laravel的最新版本(我发布这个答案的时候是5.1),这个选项一直存在。
如果将其添加到路线的开头。php
文件-它将转储Laravel运行的所有SQL:
Event::listen('illuminate.query', function($sql)
{
var_dump($sql);
});
所以,这样做,然后运行php工匠迁移
-和所有的SQL被转储。
然后,您可以将SQL记录到文件或其他文件中,而不是var_dump-可能性是无穷无尽的...