Laravel Migrations

更新於 發佈於 閱讀時間約 5 分鐘
Laravel Migrate可以用來做資料庫版本控制,對開發團隊來說,可以快速修改Schema,了解每個工程師做了什麼change,比如新增、修改哪些欄位、表格等等,是非常實用的功能。
在開始之前,須先建立好DB,並設定好.env中的DB連線config。

建立migrate指令:
$ php artisan make:migration {name}
比如建立一個migrate 目的是要建立user table:
$ php artisan make:migration create_user_table
database/migrations下會產生如下圖的檔案: prefix會自動加上建立datetime
  • 可以理解成: up()就是要對資料庫做什麼操作,down()就是把up()做的事情還原。比如若up() method用來建立table: 新增欄位、index、unique、nullable等等設定,down() method則要用來刪除table。
  • 如果再執行一次 $ php artisan make:migration create_user_table,會show已存在的error:
接著寫好up, down程式邏輯:

執行所有migrate:
$ php artisan migrate
  • 這個指令會執行所有尚未migrate的檔案中的up() method,會依建立時間順序執行。

若只想migrate某個檔案,可以指定檔案路徑:
$ php artisan migrate --path=/database/migrations/xxx.php
接著從DB中就可以看到user表建立了:
也會在DB中自動建立一張migrations表,把這次執行migrate的紀錄寫上去:
  • batch是執行順序的意思,如果有batch數字一樣的情況,表示當時是一起做migrate的,若執行rollback也會一起。
  • 假設剛剛還有一個migrate是create_product_table,一起執行migrate的話,這邊就會有兩筆紀錄,batch都是1。

有時候執行migrate會發現出現這個訊息: Nothing to migrate.
這表示已經所有migrate都有執行過了,可以查詢一下migrate狀態:
$ php artisan migrate:status

接著試試rollback: 這個指令會還原上一次的migrate,以程式碼來看就是會刪除user table,原本migrations table上的那行紀錄也會被清除。
$ php artisan migrate:rollback
  • 這邊需特別注意,即使table中有資料,執行rollback一樣會把整張table砍掉。
執行rollback後,從status上來看,會恢復成未執行的狀態:

然後再建立一個migrate,for新增產品表格:
$ php artisan make:migration create_product_table
接著執行migrate,如上述,會執行所有尚未執行migrate檔案的up(),會把user跟product表都依序建立起來:
$ php artisan migrate
由於user表結構剛剛看過了,這邊只show product:
再試試看rollback:
$ php artisan migrate:rollback
如上述,rollback會還原上一次的migrate,也就是會執行create_user_table和create_product_table的down() method,所以這時候會發現user跟product表都不見了。

先rollback所有migrate(從時間最新到最舊依序還原),再重新執行所有migrate(從最舊到最新): 也就是執行所有migrate的down method,再執行所有migrate的up method。
$ php artisan migrate:refresh

rollback所有migrate(從最新到最舊): 也就是執行所有migrate的down method。
$ php artisan migrate:reset

以上介紹了migrate的用法,對一個新加入團隊的發開者來說,一個指令就能夠馬上建置完整的local DB環境,真的是非常強大啊!
不難發現,其實Laravel是透過migrations這張表來記錄migrate狀態的,下migrate指令的時候會比對判斷table中的migration名稱,多出來的migrate檔案就是新的,要trigger up() method,並insert記錄。下rollback指令的時候,會抓table中batch數字最大的去trigger該組的down() method,然後把這組batch的data row從table中移除。
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
21會員
161內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Vic Lin的沙龍 的其他內容
假設資料情境是「每位員工可能屬於多個部門,每個部門可能包含多位員工」,這種多對多的關係。 資料情境: 程式碼: 在Model中使用belongsToMany建立多對多關係,employee_department則為中間關聯表的table name。 列出所有員工,帶上對應的部門資料: 完整程式碼:
本篇主要是要探討,with/has/whereHas/doesntHave/whereDoesntHave之間的差別,以部落格文章及留言的例子來看。 資料情境: 程式碼與結果: with是把所有文章跟留言都找出來。 has是把所有有留言的文章找出來,不包含留言。
之前在執行某些專案的時候,常看到->with()這種寫法,因此一直都很好奇到底跟->join()寫法有什麼差別,哪一種寫法效能比較好呢? 資料情境: 假設現在情境是要撈出文章跟留言,目前共有2篇文章,每篇各有4萬筆留言,也就是留言table共有8萬筆資料: 程式碼: 實驗結果: 結論:
本筆記會以簡單的例子說明,如何在Laravel中進行unit test 與 feature test。 phpunit.xml則是設定檔,可以設定哪些檔案要做測試,哪些要排除在外等等。 使用命令建立新的test case: 建立feature test: 建立unit test: 執行測試:
對於使用Laravel來講,可以直接用composer來安裝predis,可以說是相當方便: config/database.php: redis預設有16個資料庫,這邊是各個資料庫的連接設定。 要使用predis,要記得把env file中的REDIS_CLIENT改成predis。 .env:
Redis主要是運行在Linux系統環境中的,官方下載區找不到windows安裝程式,不過微軟有維護windows版本的,可以到github release page下載安裝。 直接下載msi來安裝: 測試是否安裝成功: 回傳PONG表示服務正常。 查看版本資訊: 列出所有key:
假設資料情境是「每位員工可能屬於多個部門,每個部門可能包含多位員工」,這種多對多的關係。 資料情境: 程式碼: 在Model中使用belongsToMany建立多對多關係,employee_department則為中間關聯表的table name。 列出所有員工,帶上對應的部門資料: 完整程式碼:
本篇主要是要探討,with/has/whereHas/doesntHave/whereDoesntHave之間的差別,以部落格文章及留言的例子來看。 資料情境: 程式碼與結果: with是把所有文章跟留言都找出來。 has是把所有有留言的文章找出來,不包含留言。
之前在執行某些專案的時候,常看到->with()這種寫法,因此一直都很好奇到底跟->join()寫法有什麼差別,哪一種寫法效能比較好呢? 資料情境: 假設現在情境是要撈出文章跟留言,目前共有2篇文章,每篇各有4萬筆留言,也就是留言table共有8萬筆資料: 程式碼: 實驗結果: 結論:
本筆記會以簡單的例子說明,如何在Laravel中進行unit test 與 feature test。 phpunit.xml則是設定檔,可以設定哪些檔案要做測試,哪些要排除在外等等。 使用命令建立新的test case: 建立feature test: 建立unit test: 執行測試:
對於使用Laravel來講,可以直接用composer來安裝predis,可以說是相當方便: config/database.php: redis預設有16個資料庫,這邊是各個資料庫的連接設定。 要使用predis,要記得把env file中的REDIS_CLIENT改成predis。 .env:
Redis主要是運行在Linux系統環境中的,官方下載區找不到windows安裝程式,不過微軟有維護windows版本的,可以到github release page下載安裝。 直接下載msi來安裝: 測試是否安裝成功: 回傳PONG表示服務正常。 查看版本資訊: 列出所有key:
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
在進行 Laravel 開發時,資料庫管理是開發過程中的重要環節,而 Laravel 的遷移(Migrations)提供了一個簡單而強大的方法來創建、修改和管理資料庫結構。本文將引導如何使用 Laravel 的資料庫遷移功能,並透過範例教學,幫助你掌握如何創建資料表、修改欄位、處理資料表關聯等操作。
Thumbnail
這篇文章介紹在 Laravel 中使用 Migration 管理資料庫結構,實現財務管理系統的資料表建立。Migration 提供版本控制、自動化管理和可移植性,方便開發者同步資料庫變更。還介紹了填充測試資料(Seeder)的操作,提高團隊協作效率。
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
儲存庫 (Repository) 是檔案(File)的儲存區域。 在版本控制中,儲存庫是包含所有檔案的資料夾[1]。 每次改動檔案,你都可以選擇要不要儲存。 而那些有被處存的改動,就被稱為「提交 Commit」[2]。 而當一個儲存庫有多個開發者(Developer)在貢獻,
Thumbnail
在進行Electron 專案時,後端夥伴選擇將 sqlite 資料庫跟專案檔打包成一個執行檔。在開發過程中,前端的操作經常會更動到 db的資料,此時 Git 就會追蹤到 db 的變化,因此前端在推送檔案到遠端 repo 前,會需要將其移出 Git 追蹤範圍,該怎麼做?
※ 需要做版本備份時: git init:初始化此資料夾,由git 開始追蹤版本控制。 git add:將檔案加入到暫存區。 git commit:把暫存區的內容提交到儲存庫。 git status:查看目前所有檔案的狀態。 git log:查看過去所有commit的記錄。 ※ 需要做修
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
在進行 Laravel 開發時,資料庫管理是開發過程中的重要環節,而 Laravel 的遷移(Migrations)提供了一個簡單而強大的方法來創建、修改和管理資料庫結構。本文將引導如何使用 Laravel 的資料庫遷移功能,並透過範例教學,幫助你掌握如何創建資料表、修改欄位、處理資料表關聯等操作。
Thumbnail
這篇文章介紹在 Laravel 中使用 Migration 管理資料庫結構,實現財務管理系統的資料表建立。Migration 提供版本控制、自動化管理和可移植性,方便開發者同步資料庫變更。還介紹了填充測試資料(Seeder)的操作,提高團隊協作效率。
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
儲存庫 (Repository) 是檔案(File)的儲存區域。 在版本控制中,儲存庫是包含所有檔案的資料夾[1]。 每次改動檔案,你都可以選擇要不要儲存。 而那些有被處存的改動,就被稱為「提交 Commit」[2]。 而當一個儲存庫有多個開發者(Developer)在貢獻,
Thumbnail
在進行Electron 專案時,後端夥伴選擇將 sqlite 資料庫跟專案檔打包成一個執行檔。在開發過程中,前端的操作經常會更動到 db的資料,此時 Git 就會追蹤到 db 的變化,因此前端在推送檔案到遠端 repo 前,會需要將其移出 Git 追蹤範圍,該怎麼做?
※ 需要做版本備份時: git init:初始化此資料夾,由git 開始追蹤版本控制。 git add:將檔案加入到暫存區。 git commit:把暫存區的內容提交到儲存庫。 git status:查看目前所有檔案的狀態。 git log:查看過去所有commit的記錄。 ※ 需要做修
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更