Laravel4.1數據庫 數據庫遷移(三)

該章節內容翻譯自《Database Migration using Laravel》,一切版權爲原做者。

原做者:Stable Host, LLCphp

正文:laravel

Laravel鼓勵敏捷、迭代的開發方式,咱們沒期望在第一次就得到全部正確的。相反,咱們編寫代碼、測試和與咱們的最終用戶進行交互,並完善咱們的理解。數據庫

對於工做,咱們須要一個配套的實踐集。咱們使用像subversion、GIT或Mercurial這些版本控制工具來存儲應用程序的源代碼文件,使咱們可以撤消錯誤和追蹤開發過程當中的改變。後端

但應用程序更改時,存在咱們不能單獨使用版本控制進行有效管理的區域。在咱們的開發進度中,Laravel應用程序的數據庫架構不斷演變:咱們在這裏添加了一個表,在那裏重命名列,刪除索引等等。數據庫的改變與應用程序代碼步調一致。服務器

你須要一個複雜的方法來跟蹤您的數據庫架構更改,一般有幾種方法:架構

  • 當您在開發團隊內工做時,每人都須要知道關於任何架構的更改。
  • 當你在生產服務器上部署時,您須要有穩健的方式來升級您的數據庫架構。
  • 若是您在多臺機器上工做,你須要保持全部數據庫架構的同步。

若是沒有嚴格的約定和紀律讓應用程序開發者遵循,保持數據庫架構與應用程序代碼同步從來是一個很是麻煩的工做。開發者(或數據庫管理員) 進行所需的架構更改。可是,若是應用程序代碼回滾到之前的版本,可是很難撤消數據庫架構更改,照成數據庫版本信息與應用程序代碼版本信息不一致。app

遷移就是幫助你進化你的應用程序數據架構的Laravel方式,它不須要你在每次改變的時候刪除或者重建數據庫。沒有刪除和重建就意味着你不會在每次改變的時候丟失數據。當你執行遷移時惟一的改變就是將數據庫架構從一個版本移到另外一個版本,不論是向前仍是向後移。工具

Laravel遷移給你提供了一種在迭代方式中修改數據庫架構的手段,它不要你用SQL操做,而是容許你使用PHP代碼。Laravel架構生成器容許咱們快速建立數據庫表和插入列或索引。它使用清潔和富有表現力的語法來操做數據庫。你也許爲認爲Laravel遷移就是數據庫的版本控制。測試

經過定義一個更高級別的接口來建立和維護數據庫架構,你能夠用與數據庫無關的方式定義它。經過使用 PHP 來建立表,定義列和索引,寫一次架構並將其應用到任何所支持的數據庫後端。額外的好處是 ,Laravel 跟蹤已經應用了哪些遷移和哪些仍須要應用。spa

遷移基礎知識

一個Laravel遷移僅僅是你應用程序app/database/migrations目錄下的PHP源文件。每一個文件都包含了對底層數據庫的一組改變。對數據庫的改變是在PHP代碼中而不是數據庫特定的SQL。你的PHP遷移代碼最終被轉換成符合你當前數據庫的DDL,這使得切換數據庫平臺很是的容易。因爲遷移代碼保存在本身的目錄中,就務必要像其餘的項目代碼同樣包含到版本控制裏面。Laravel遷移是使用Artisan工具用命令行顯示運行的。

遷移文件命名約定

在舊版本Laravel的,遷移的文件有比較簡單的名字,如001_create_employees_table.php 。 Laravel 3(Laravel 4.1和其相同)帶來了新的命名約定,其中名稱的第一部分從一個序列號變動爲更長的時間,像2014_03_11_032903_create_employees_table.php。該文件的名稱的形式YYYY_MM_DD_HHMMSS_some_meaningful_name.php的,也就是說一個UTC時間戳識別後跟一個遷移名。

新的更寬的名字有助於避免名稱衝突,若是你是工做在一個團隊裏的一個開發人員,你能夠檢查本身的遷移。

此外, Laravel遷移文件的時間戳,以便他們能夠順序執行。時間戳數字是遷移的關鍵,由於它們定義了哪個遷移應用在獨立遷移版本號的順序。

想SQL腳本,遷移從頂部開始執行,這更加須要這些文件才能被執行。順序執行移除了相似這樣的可能性——在表不存在的時候嘗試插入列。

儘管你能夠手動建立遷移文件,可是使用Artisan工具生成遷移腳本更加的容易(而且不易出錯)。你能夠根據須要在之後編輯這些文件。

運行遷移Forward 和 Backward

使用Artisan工具遷移到數據庫。Laravel提供了一套artisan任務,能夠歸結爲運行特定的幾套遷移。

[注]你能夠運行artisan list同查看artisan支持的任務列表,大多數數據遷移相關的任務都帶有前綴migrate:

只有幾個你須要知道的常見任務:

  • migrate:install
    你第一次使用的與遷移有關的artisan任務可能就是migrate:install。在內部,Laravel使用特殊的表來跟蹤哪些遷移已經運行。若要建立此表,只須要用artisan命令行工具:
    $php artisan migrate:install
  • migrate
    你將會運行migrate任務頻繁的更新你的數據庫,以支持你添加到應用程序中的最新的表和列。最基本的形式,它只會對那些全部沒有被運行過的遷移運行up()方法。若是沒有這樣的遷移,會退出。它將基於遷移的日期來運行這些遷移。
  • migrate:rollback
    在寫遷移時偶爾也會犯錯誤。若是你已經運行了遷移,那麼你不能只是編輯遷移和再次運行遷移:Laravel假定它已經運行了遷移,那麼當你再次運行artisan migrate,不會作任何事情。你必須使用artisan migrate:rollback回滾遷移,而後編輯遷移,再運行artisan migrate去運行正確的版本。

通常狀況下,編輯現有的遷移不是好主意:你和你的同事將會須要額外的工做,而且這是一件讓人頭痛的事——若是現存版本的遷移已經運行在生產機器上。相反,你須要寫一個新的遷移去執行所需的改變。

[注]artisan migrate:rollback 會刪除上次的遷移應用。Laravel回去整個遷移「操做」。所以,若是上次的遷移命令運行了15個遷移,這15個遷移都會被回滾。請注意,當你刪除列或者表,會丟失數據。

    • migrate:reset
      回滾全部的遷移(會刪掉全部表和數據)
    • migrate:refresh
      artisan migrate:refresh任務將刪除數據庫、 從新建立它並將加載當前架構。這是一個方便快捷方式去運行重置並隨後從新運行全部遷移。
    • migrate:make
      artisan migrate:make命令告訴 Laravel 來生成一個遷移文件骨架 (這是其實是一個 PHP 文件) ,存放到app/database/migrations文件夾中。而後,您能夠編輯此文件來充實您的表/索引定義。而後,artisan migrate命令運行時,artisan會查詢此文件來生成 SQL DDL 的實際代碼。

 

接下來會詳細描述數據庫遷移

未完待續……

相關文章
相關標籤/搜索