回到最上方

文件

Migrations & Seeding

介紹

Migration 是資料庫的版本控制系統,可以讓你們團隊去修改資料庫的結構,並保持彼此的資料庫結構都在最新狀態, Migration 搭配 Schema產生器 方便的管理你應用程式資料庫的結構。

建立 Migrations

你可以在 Artisan CLI 中使用 migrate:make 去建立一個新的 Migration:

建立新的 Migration

php artisan migrate:make create_users_table

產生的 Migration 檔案將會被放在 app/database/migrations 資料夾當中,檔名中會包含時間戳記,讓 Laravel 可以知道這些 Migration 執行的順序。

在建立 Migration 時你也可以使用 --path 選項去指定 Migration 產生的路徑,這個路徑是相對於你安裝 Laravel 的根目錄:

php artisan migrate:make foo --path=app/migrations

--table--create 選項可以用來指定自動產生的 Migration 檔案中,要使用什麼樣的資料表名稱,以及告訴 Migration 要做建立資料表的動作:

php artisan migrate:make create_users_table --table=users --create

執行 Migrations

執行所有尚未執行的 Migration

php artisan migrate

執行指定路徑中,所有中尚未執行的 Migration

php artisan migrate --path=app/foo/migrations

執行指定套件中,所有尚未執行的 Migration

php artisan migrate --package=vendor/package

注意: 如果你在執行 Migration 時收到 "class not found" 的錯誤訊息,可以試著執行 composer update 指令去更新套件。

復原 Migrations

復原最後一筆 migration 紀錄

php artisan migrate:rollback

重設所有的 migration 紀錄

php artisan migrate:reset

重設所有的 migration,並重新執行所有的 migration

php artisan migrate:refresh

php artisan migrate:refresh --seed

資料庫 Seeding

Laravel 亦提供簡單的 seed 類別方法,去產生資料庫的測試資料,所有的 seed 類別存放在 app/database/seeds 目錄中, seed 類別名稱可以隨意的命名,但必須遵循一些規則,像是 UserTableSeeder ,預設情況下會為你定義 DatabaseSeeder 類別,從這個類別你可以使用 call 方法去執行你的測試資料種子的類別方法,讓你可以控制測試資料的順序。

資料庫 Seed 類別範例

class DatabaseSeeder extends Seeder {

    public function run()
    {
        $this->call('UserTableSeeder');

        $this->command->info('User table seeded!');
    }

}

class UserTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();

        User::create(array('email' => 'foo@bar.com'));
    }

}

你可以在 Artisan CLI 使用 db:seed 去執行產生你 Seed 的測試資料:

php artisan db:seed

你也可以使用 migrate:refresh 指令去產生你 Seed 的測試資料,這個指令會回復並重新執行所有的 Migration:

php artisan migrate:refresh --seed

討論