Laravel的数据迁移功能很好用,而且能够带来一系列好处。
经过几条简单的 artisan 命令,就能够顺利上手,没有复杂的地方php
注意:该系列命令对数据库很是危险,请准备一个单独的数据库做为配套练习,假设你已经新建了一个空的数据库git
首先新建一个迁移表文件,好比test表github
php artisan make:migration CreateTestTable (文件名格式并无要求)数据库
这个时候项目中生成了一个新的迁移文件,在 project/database/migrations/ 目录下app
打开这个文件,编辑表结构dom
public function up() { Schema::create('test', function (Blueprint $table) { $table->increments('id'); $table->string('name',30); $table->integer('sex'); $table->timestamps(); }); }
这个时候数据库应该仍是空的,没有任何表,这个时候执行:this
php artisan migrate:freshspa
如今数据库里面多了一张test表了,而后在打开迁移文件,增长字段或者删除字段等修改,再次执行上面的命令,数据库的test表被刷新了。调试
到此Laravel的数据库迁移就已经完了。code
可是一般还有一个功能和数据库迁移常常同事存在,为了方便调试咱们一般要往数据库里面填充一些数据,就是数据填充。
php artisan make:seed TestSeeder
这个时候项目中生成了一个新的seeder文件,在 project/database/seeds/ 目录下
打开并编辑里面的run方法:
public function run() { \Illuminate\Support\Facades\DB::table('test') ->insert([ 'name' => '张三' . str_random(), 'sex' => rand(0,1) ]); }
打开seeds目录下自带的 DatabaseSeeder.php 文件,编辑run方法
public function run() { $this->call(TestSeeder::class); }
而后执行 php artisan db:seed
这个时候 test 表会增长一条数据,若是要一次批量增长更过数据能够这样:
public function run() { for ($i = 0; $i < 100; $i++) { $this->call(TestSeeder::class); } }
这种数据填充的方式不是很优雅,咱们换一种更好的方式来实现数据填充
新建一个 Test 模型: php artisan make:model Test
这个时候项目中生成了一个新的Model文件,在 project/app/ 目录下
打开文件添加一个属性 protected $table = 'test'; (绑定表)
在建立一个模型工厂: php artisan make:factory TestFactory
这个时候项目中生成了一个新的Factory文件,在 project/database/factories/ 目录下,打开并编辑:
$factory->define(\App\Test::class, function (Faker $faker) { return [ 'name' => $faker->name, 'sex' => $faker->biasedNumberBetween(0,1) ]; });
从新打开并编辑对应的Seeder文件:TestSeeder.php
public function run() { factory(\App\Test::class,50)->create(); // \Illuminate\Support\Facades\DB::table('test') // ->insert([ // 'name' => '张三' . str_random(), // 'sex' => rand(0,1) // ]); }
再次执行: php artisan db:seed ,这个时候数据库一次多了50条数据
经常使用命令组合
php artisan migrate:fresh --seed (重建数据表结构并执行数据填充)
其余
对于老项目想要快速介入 Laravel的数据迁移,一个表一个表的去建 Migrate显然是很累的,github上有一个将根据表自动生成migrate的库可供参考:
https://github.com/Xethron/migrations-generator
注意: 最近发现这个库还有有一些问题,生成迁移文件后仍是挨个检查一下,在本地运行看看结果