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