laravel逆向生成迁移文件
一、laravel的数据迁移和数据填充,能够随着源代码的改变而同步记录同步数据库结构的变化,也就是对数据库的版本控制。
但是,有的项目开发之初,数据库结构的变化会比较频繁,每个都手动创建migrate文件的,工作量会比较大,或者老项目已有数据库,如果手动为所有的已存在的表去创建迁移文件的会非常耗时,还容易出错。
这里,就给大家分享一下如何逆向生成迁移文件。
本文基于Laravel5.5,其他版本大同小异。
安装
轮子早就有人造好啦,xethron/migrations-generator,只需要composer安装一下
composer require --dev "xethron/migrations-generator"
在 config/app.php中添加相应的服务提供者
// 省略之前内容 'providers' => [ // 省略之前内容 Way\Generators\GeneratorsServiceProvider::class, Xethron\MigrationsGenerator\MigrationsGeneratorServiceProvider::class, ],
注册服务,在app/Providers/AppServiceProvider.php中register()方法里添加
// 仅在开发环境中使用 if ($this->app->environment() !== 'production') { $this->app->register(\Way\Generators\GeneratorsServiceProvider::class); $this->app->register(\Xethron\MigrationsGenerator\MigrationsGeneratorServiceProvider::class); }
生成迁移文件(项目根目录运行)
php artisan migrate:generate #根据提示输入Y 1 可生成Migrations文件
php artisan migrate:generate table1,table2,table3 #可以指定某张表生成迁移文件
php artisan migrate:generate --ignore="table3,table4,table5" #也可以反向忽略某些表
php artisan help migrate:generate #更多用法,请使用help查看
ps:如果第一次生成如果根目录文件夹 /database 文件夹下没有migrations文件夹会提示错误这里要手动新建一下
二、上面生成了迁移文件回滚时会清除表中已有数据一些适合直接导入数据库的数据难以生成seeder文件,系统部署时尤其麻烦。
下面使用seed逆向生成器 iseed
composer require orangehill/iseed --dev #只是开发环境使用(最新的Laravel版本具有自动发现功能并自动添加服务提供商-如果您使用的是5.4.x及更低版本,请记住将其添加到providers
数组/app/config/app.php
)
php artisan iseed my_table,another_table 默认使用laravel default指定的数据库 php artisan iseed share_gifts --database=collegeData database为配置文件中的connect名称 php artisan iseed links --force --max=5 --exclude=created_at,updated_at --force —— 强制覆盖已有文件; --max —— 最多导出多少条; --exclude —— 不包含的字段
这里也有两个小坑,
1.如果第一次使用database 文件下没有seed文件夹会有错误提示,
2.在seed文件下没有DatabaseSeeder.php也会有错误提示所以新建文件
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call(DocApplyTableSeeder::class); } }