Laravel數據庫遷移

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

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

相關文章
相關標籤/搜索