熟悉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

执行完成之后,数据就自动填充进线上数据库中了。

更多推荐