熟悉laravel的同学都知道,laravel的数据迁移和数据填充,能够随着源代码的改变而同步记录同步数据库结构的变化,也就是对数据库的版本控制。
但是,有的项目开发之初,数据库结构的变化会比较频繁,每个都手动创建migrate文件的,工作量会比较大,或者老项目已有数据库,如果手动为所有的已存在的表去创建迁移文件的会非常耗时,还容易出错。
这里,就给大家分享一下如何逆向生成迁移文件。
git地址:https://github.com/kitloong/laravel-migrations-generator
本文基于Laravel8,其他版本大同小异。
安装
轮子早就有人造好啦,xethron/migrations-generator,只需要composer安装一下
composer require --dev "kitloong/laravel-migrations-generator"
1、结构迁移
(1) 为了将本地库的数据表结构自动创建为migration文件,我们需要预先安装个库(传送门):
我们不需要自己clone,不需要自己手动配置,只需在项目根目录下运行:
composer require --dev "kitloong/laravel-migrations-generator" -vvv
(2) 导出organiztion表的迁移结构
php artisan migrate:generate
导出的迁移结构被存放到了/database/migrations目录下。
(3) 在线上环境导入
将项目/database/migrations传到线上环境中,并运行以下命令:
php artisan migrate --force
命令运行完成后,就会发现,线上数据库中被导入了organization表。同时,数据库中自动创建了migrations表,这张表的作用是登记已经迁移成功的表结构。如果下次想要重新迁移一次,需要清空这张表对应的数据。
到这一步,该迁移的表结构,已经都迁移成功了。接下来,在迁移成功的表结构中,填充初始数据。
2、数据填充
(1) 同样,为了自动将本地数据导出为seeder,我们需要先安装下面的库
composer require "orangehill/iseed" -vvv
在网上很多文章中,还需要进行下面两个步骤,但是在我的版本中是不需要的。这两个步骤记录在此,仅供参考:
在/config/app.php中添加:
'providers' => [
...
Orangehill\Iseed\IseedServiceProvider::class,
],
并执行:
composer dump-autoload
(2) 导出organization表的填充数据
php artisan iseed organization --force
导出的填充数据,会自动放到/database/seeds目录中。
(3) 在线上环境中导入
将/database/seeds下的文件传到线上环境,并运行以下命令:
php artisan db:seed --force
执行完成之后,数据就自动填充进线上数据库中了。