16回答

0收藏

如何将Laravel迁移转化为原始SQL脚本?

技术问答 技术问答 1325 人阅读 | 16 人回复 | 2022-03-03

我们团队的开发人员真的习惯了Laravel他们在本地计算机和我们的开发服务器上工作得很好。但是客户的数据库管理员不会接受Laravel迁移。他要求为我们的应用程序的每个新版本提供原始版本SQL脚本。, s3 Y1 r$ `) P2 }+ i( r
是否有任何工具或编程技术可以捕获Laravel向上/向下移动SQL脚本输出?
: N8 d7 v. i% L2 ^! Y如果创建生产版本,SQL脚本生成集成CI系统(TeamCity)中,那将是完美的。' j7 I7 o/ e/ z7 R7 |
顺便说一句,我们将在这个项目中使用它Laravel 5和PostgreSQL。
5 p& P8 t/ w3 w8 d/ H+ D1 H/ _                                                                ( M5 u8 r8 c" H2 @$ S8 `6 F
    解决方案:                                                               
3 u6 x- l$ i. C9 N                                                                使用migration命令您可以--pretend在运行php artisan migrate将查询输出到终端时添加标志:$ f# o: r$ T5 ]8 {  Q" h0 O
php artisan migrate --pretend看上去像这样:
$ G! X% Y9 r  U* [; GMigration table created successfully.CreateUsersTable: create table "users" ("id" integer not null primary key autoincrement,"name" varchar not null,"email" varchar not null,"password" varchar not null,"remember_token" varchar null,"created_at" datetime not null,"updated_at" datetime not null)CreateUsersTable: create unique index users_email_unique on "users" ("email")CreatePasswordResetsTable: create table "password_resets" ("email" varchar not null,"token" varchar not null,"created_at" datetime not null)CreatePasswordResetsTable: create index password_resets_email_index on "password_resets" ("email")CreatePasswordResetsTable: create index password_resets_token_index on "password_resets" ("token")要将其保存到文件中,只需在 不带ansi的情况下    重定向输出 即可    :
1 z* ]# |; e6 c) ?( {& }php artisan migrate --pretend --no-ansi > migrate.sql该命令仅包括未迁移的迁移。8 j, v7 L) z" n& U
解决迁移命令为了进一步定制获取查询的方式,请考虑破解源代码并制作自己的定制命令或类似命令。为了让你开始使用它,所有的迁移都有一些快速代码。7 u2 R6 B, `% S' A$ V+ i! j
范例程式码$migrator = app('migrator');$db = $migrator->resolveConnection(null);$migrations = $migrator->getMigrationFiles('database/migrations');$queries = [];foreach($migrations as $migration)    $migration_name = $migration;    $migration = $migrator->resolve($migration);    $queries[] =      name' => $migration_name,    queries' => array_column($db->pretend(function() use ($migration) { $migration->up()query},   dd($queries);输出示例array:2 [  0 => array:2 [    "name" => "2014_10_12_000000_create_users_table"    "queries" => array:2 [      0 => "create table "users" ("id" integer not null primary key autoincrement,"name" varchar not null,"email" varchar not null,"password" varchar not null,"remember_token" varchar null,"created_at" datetime not null,"updated_at" datetime not null)"      1 => "create unique index users_email_unique on "users" ("email")"   => array:2 [    "name" => "2014_10_12_100000_create_password_resets_table"    "queries" => array:3 [      000 => "create table "password_resets" ("email" varchar not null,"token" varchar not null,"created_at" datetime not null)"      1 => "create index password_resets_email_index on "password_resets" ("email")"     2 => "create index password_resets_token_index on "password_resets" ("token")"    这个代码将包括 所有
/ q) v/ ?5 `* W) E迁移。如果您想知道如何只获得尚未迁移的内容,请间内容run()方法vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php。
分享到:
回复

使用道具 举报

回答|共 16 个

飞一样的谜

发表于 2022-3-4 00:01:28 | 显示全部楼层

学习下
回复

使用道具 举报

吃鱼会变丑

发表于 2022-3-5 14:49:56 | 显示全部楼层

顶起出售广告位
回复

使用道具 举报

丽坤

发表于 2022-3-6 15:47:13 | 显示全部楼层

路过 帮顶 嘿嘿
回复

使用道具 举报

笑谈天下

发表于 2022-3-7 10:00:18 | 显示全部楼层

LZ敢整点更有创意的不?兄弟们等着围观捏~
回复

使用道具 举报

香炉山人

发表于 2022-3-8 05:30:21 | 显示全部楼层

回复

使用道具 举报

卡比兽

发表于 2022-3-8 16:43:20 | 显示全部楼层

占位编辑
回复

使用道具 举报

孙祯

发表于 2022-3-8 23:51:54 | 显示全部楼层

看起来好像不错的样子
回复

使用道具 举报

晨曦余痕

发表于 2022-3-9 06:01:51 | 显示全部楼层

我也是坐沙发的
回复

使用道具 举报

静明

发表于 2022-3-9 11:15:48 | 显示全部楼层

看帖要回,回帖才健康,在踩踩,楼主辛苦了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

29060 积分
9660 主题
热门推荐