Laravel框架中數據庫和數據庫遷移簡單分析

laravel框架的開發方式有著敏捷、迭代的特點,并不指望在第一次就獲得所有正確的代碼。相反,我們編寫代碼、測試和與我們的最終用戶進行交互,并完善我們的理解。

對于工作,我們需要一個配套的實踐集。我們使用像subversion、GIT或Mercurial這些版本控制工具來存儲應用程序的源代碼文件,使我們能夠撤消錯誤和追蹤開發過程中的改變。

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

你需要一個復雜的方法來跟蹤您的數據庫架構更改,通常有幾種方法:

  • 當您在開發團隊內工作時,每人都需要知道關于任何架構的更改。

  • 當你在生產服務器上部署時,您需要有穩健的方式來升級您的數據庫架構。

  • 如果您在多臺機器上工作,你需要保持所有數據庫架構的同步。

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

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

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

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

遷移基礎知識

一個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 的實際代碼。

相關推薦:

laravel框架

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享