遷移是一種數(shù)據(jù)庫(kù)的版本控制。可以讓團(tuán)隊(duì)在修改數(shù)據(jù)庫(kù)結(jié)構(gòu)的同時(shí),保持彼此的進(jìn)度一致。遷移通常會(huì)和 結(jié)構(gòu)生成器 一起使用,可以簡(jiǎn)單的管理數(shù)據(jù)庫(kù)結(jié)構(gòu)。
使用 Artisan CLI 的 make:migrate
命令建立遷移文件:
php artisan make:migration create_users_table
遷移文件會(huì)建立在 database/migrations
目錄下,文件名會(huì)包含時(shí)間戳記,在執(zhí)行遷移時(shí)用來(lái)決定順序。
你也可以在建立遷移命令加上 --path
參數(shù)。路徑要相對(duì)于應(yīng)用程序所在的根目錄。
php artisan make:migration foo --path=app/migrations
--table
和 --create
參數(shù)可以用來(lái)指定數(shù)據(jù)表名稱(chēng),以及遷移文件是否要建立新的數(shù)據(jù)表。
php artisan make:migration add_votes_to_users_table --table=users
php artisan make:migration create_users_table --create=users
php artisan migrate
注意: 如果在執(zhí)行遷移時(shí)發(fā)生「class not found」錯(cuò)誤,試著先執(zhí)行
composer dump-autoload
命令后再進(jìn)行一次。
有些遷移操作是具有破壞性的,意味著可能讓你遺失原本保存的數(shù)據(jù)。為了防止你在上線環(huán)境執(zhí)行到這些遷移命令,你會(huì)被提示要在執(zhí)行遷移前進(jìn)行確認(rèn)。加上--force
參數(shù)執(zhí)行強(qiáng)制遷移:
php artisan migrate --force
php artisan migrate:rollback
php artisan migrate:reset
php artisan migrate:refresh
php artisan migrate:refresh --seed
Laravel 可以簡(jiǎn)單的使用 seed 類(lèi),填充測(cè)試數(shù)據(jù)到數(shù)據(jù)庫(kù)。所有的 seed 類(lèi)放在database/seeds
目錄下??梢允褂萌魏文阆胍念?lèi)名稱(chēng),但是應(yīng)該遵守某些大小寫(xiě)規(guī)范,如UserTableSeeder
之類(lèi)。默認(rèn)已經(jīng)有一個(gè)DatabaseSeeder
類(lèi)。在這個(gè)類(lèi)里,使用call
方法執(zhí)行其他的 seed 類(lèi),讓你控制填充的順序。
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'));
}
}
要執(zhí)行數(shù)據(jù)填充,可以使用 Artisan CLI 的db:seed
命令:
php artisan db:seed
默認(rèn)db:seed
命令會(huì)執(zhí)行DatabaseSeeder
,可以使用它來(lái)調(diào)用其他 seed 類(lèi),不過(guò),也可以使用--class
參數(shù)指定要單獨(dú)執(zhí)行的類(lèi):
php artisan db:seed --class=UserTableSeeder
你也可以使用migrate:refresh
命令填充數(shù)據(jù),它會(huì)回滾并且再次執(zhí)行所有遷移:
php artisan migrate:refresh --seed