Laravel鼓勵敏捷、迭代的開發(fā)方式,我們沒指望在第一次就獲得所有正確的。
我們對于自己編寫代碼,可以通過遷移文件,不斷的重復(fù)去測試.
對于工作,我們開發(fā)一個完整的項目,是需要我們每個人相互配合,就好比用svn,git版本控制工具來存儲應(yīng)用程序的源代碼文件,使我們能夠撤消錯誤和追蹤開發(fā)過程中的改變。
但應(yīng)用程序更改時,存在我們不能單獨使用版本控制進行有效管理的區(qū)域。在我們?nèi)绻褂胠aravel框架開發(fā)項目,這個過程中,Laravel應(yīng)用程序的數(shù)據(jù)庫架構(gòu)不斷演變:如我們在這里添加了一個表,在那里重命名列,刪除索引等等,然后出現(xiàn)錯誤我們可以直接找到哪里出的錯,是誰操作的,便于直接解決問題和團隊開發(fā).
當(dāng)你需要一個復(fù)雜的方法來跟蹤您的數(shù)據(jù)庫架構(gòu)更改,通常有幾種方法:
1.當(dāng)您在開發(fā)團隊內(nèi)工作時,每人都需要知道關(guān)于任何架構(gòu)的更改。
2.當(dāng)你在生產(chǎn)服務(wù)器上部署時,您需要有穩(wěn)健的方式來升級您的數(shù)據(jù)庫架構(gòu)。
3.如果您在多臺機器上工作,你需要保持所有數(shù)據(jù)庫架構(gòu)的同步。
如果沒有嚴(yán)格的約定和紀(jì)律讓應(yīng)用程序開發(fā)者遵循,保持?jǐn)?shù)據(jù)庫架構(gòu)與應(yīng)用程序代碼同步歷來是一個非常麻煩的工作。開發(fā)者(或數(shù)據(jù)庫管理員) 進行所需的架構(gòu)更改。但是,如果應(yīng)用程序代碼回滾到以前的版本,但是很難撤消數(shù)據(jù)庫架構(gòu)更改,照成數(shù)據(jù)庫版本信息與應(yīng)用程序代碼版本信息不一致。
遷移就是幫助你進化你的代碼數(shù)據(jù),它不需要你在每次改變的時候delete或者alert數(shù)據(jù)庫。沒有刪除和重建就意味著你不會在每次改變的時候丟失數(shù)據(jù)。當(dāng)你執(zhí)行遷移時唯一的改變就是將數(shù)據(jù)庫架構(gòu)從一個版本移到另一個版本,不管是向前還是向后移,相對于svn這樣的。
Laravel遷移給你提供了一種在迭代方式中修改數(shù)據(jù)庫架構(gòu)的手段,它不需要你用SQL操作,而是直接使用封裝好的類。Laravel架構(gòu)生成器允許我們快速創(chuàng)建數(shù)據(jù)庫表和插入列或索引。它使用清潔和富有表現(xiàn)力的語法來操作數(shù)據(jù)庫。你也許為認(rèn)為Laravel遷移就是數(shù)據(jù)庫的版本控制。
通過定義一個更高級別的接口來創(chuàng)建和維護數(shù)據(jù)庫架構(gòu),你可以用與數(shù)據(jù)庫無關(guān)的方式定義它。通過使用 PHP 來創(chuàng)建表,定義列和索引,寫一次架構(gòu)并將其應(yīng)用到任何所支持的數(shù)據(jù)庫后端。
以上參考Database Migration using Laravel和自己的理解.
laravel 遷移文件基礎(chǔ)
laravel遷移文件是定義在laravel框架項目根目錄下database/migrations下,在這里可以進行表的創(chuàng)建,列的添加和刪除,版本的回退功能,直接用命令去操作,把遷移文件直接保存到目錄中方便操作,就好比把php代碼直接保存.但是在laravel中的遷移命令都是依靠Artisan工具去執(zhí)行的.
laravel遷移文件的生成
一個非常見簡單的命令,但是我們需要使用laravel的artisan工具,同樣的也需要配置好我們的php環(huán)境,能夠在命令行中去執(zhí)行,首先下面的是創(chuàng)建表的遷移文件
php artian make:migration create_table_goods --create=goods

這個命令呢是創(chuàng)建一個叫做goods表的遷移文件,在命令行中去執(zhí)行,成功之后,來到database/migration目錄中:

那么在up方法中可以執(zhí)行添加列的語句如:
public function up()
{
Schema::create('goods', function (Blueprint $table) {
$table->increments('id');
$table->string('email');//添加email字段
$tbale->integer('mobile');//添加moble字段
$table->timestamps();
});
}
那么怎么生成呢 php artisan migrate //執(zhí)行所有的遷移文件的命令
在項目根目錄執(zhí)行這個命令,成功,去查看自己的數(shù)據(jù)庫,多出一個goods表
假如我做項目,做到一半發(fā)現(xiàn)這個表中,缺少一個那么的字段,那怎么辦呢,手動去數(shù)據(jù)庫中添加么,不用的?我們還可以用遷移文件去完成
php artisan make:migration add_name_to_goods --table=goods

在命令行中去執(zhí)行成功之后來到遷移文件目錄下

public function up()
{
Schema::table('goods', function (Blueprint $table) {
$table->string('name');//添加name字段
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('goods', function (Blueprint $table) {
$table->dropColumn('name');//刪除字段以便于后期修改錯誤一定要寫
});
再次執(zhí)行遷移文件,發(fā)現(xiàn)goods表中多出一個name字段,說明我們添加成功
那么我們在看一下artisan其他的命令
migrate:install
在內(nèi)部,Laravel使用特殊的表來跟蹤哪些遷移已經(jīng)運行。若要創(chuàng)建此表,只需要用artisan命令行工具:
php artisan migrate:install
migrate
你將會運行migrate任務(wù)頻繁的更新你的數(shù)據(jù)庫,以支持你添加到應(yīng)用程序中的最新的表和列。最基
本的形式,它只會對那些所有沒有被運行過的遷移運行up()方法。
migrate:rollback
在寫遷移時偶爾也會犯錯誤。如果你已經(jīng)運行了遷移,那么你不能只是編輯遷移和再次運行遷移:
Laravel假定它已經(jīng)運行了遷移,那么當(dāng)你再次運行artisan migrate,不會做任何事情。你必須使
用artisan migrate:rollback回滾遷移,然后編輯遷移,再運行artisan migrate去運行正確的版本。
migrate:reset
回滾所有的遷移(會刪掉所有表和數(shù)據(jù))
migrate:refresh
artisan migrate:refresh任務(wù)將刪除數(shù)據(jù)庫、 重新創(chuàng)建它并將加載當(dāng)前架構(gòu)。這是一個方便快方
式去運行重置并隨后重新運行所有遷移。
migrate:make
artisan migrate:make命令告訴 Laravel 來生成一個遷移文件骨架 (這是實際上是一個 PHP
文件) ,存放到app/database/migrations文件夾中。然后,您可以編輯此文件來充實您的表/索
引定義。然后,artisan migrate命令運行時,artisan會查詢此文件來生成 SQL DDL 的實際代碼。
php artisan migrate --force: 強制執(zhí)行最新的遷移文件
這就是laravel 遷移文件的強大之處,方便我們團隊去開發(fā),省略不必要的麻煩