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
注意: 最近發現這個庫還有有一些問題,生成遷移文件後仍是挨個檢查一下,在本地運行看看結果