2023年1月19日

Laravel Artisan 常用指令教學,學會 Artisan 常用指令,讓開發效率倍數提升

在黑白畫面打幾行指令,東西就跑出來了,在外人眼中看起來是相當的酷炫的行為。

而 Laravel 就提供了一個這樣的工具。

這個工具叫做 Artisan,它提供了一個方便的命令列介面(CLI)指令工具,讓開發者可以方便地執行指令,例如 ControllerModel 的創建,或是執行 migrate,也可以用來啟動排程 schedule

學會 Artisan,可以將許多重複的瑣事轉換成自動化的行為,有助於提升開發效率,並減少錯誤的發生。

Laravel Artisan 基本用法

artisan 其實是一隻 PHP 程式,因此可以透過 PHP 來執行它。在 Laravel 專案目錄,使用下列指令,即可呼叫artisan

php artisan

也可以用直接執行 artisan

./artisan

我個人習慣用 php artisan 大家可以自由選擇自己喜歡的方式。

artisan 後方可以直接加指令名稱, 因此想知道有那些指令可以使用,可以透過 list 指令,list 將會列出所有可用指令,包含使用者自訂指令。

php artisan list

本篇以內建指令為主,之後有機會再來詳談使用者自定義指令。

常用指令

make 系列

make 指令顧名思義,就是用來產生檔案的指令,Artisan 預設提供了非常多種 make 指令,大家可以自己 list 出來看,這邊提供幾個作為範例。

make:controller

這個 make 指令用來產生 Controller,基本用法如下:

php artisan make:controller DemoController

執行成功後,會自動在 controller 的目錄中新增一個名為 DemoController.php 檔案,打開來看會發現基本的 Controller 的結構都準備好了。

controller 目錄在 Laravel 專案根目錄中的這個路徑: app/Http/Controllers/

你也可以把 Controller 放在不同的目錄中,例如下方指令,會自動在 controller 目錄中新增一個 GoodJob 目錄,並且把 DemoController.php 放在裡面。

php artisan make:controller GoodJob\\DemoController 

make:model

這個 make 指令用來產生 Model,基本用法如下:

 php artisan make:model Demo

執行成功後,會自動在 model 目錄中新增一個名為 Demo.php 檔案,打開來看會發現基本的 Model 的結構都準備好了。跟 make:controller 一樣,可以改變產生 model 的目錄。

model 目錄在 Laravel 8.x 版後位於 app\Models

make:migration

make:migration用來產生 migration 檔案,基本用法如下。指令後面接的名稱雖然是使用大寫駝峰式,但是 artisan 會自動轉換成蛇式命名。

 php artisan make:migration CreateDemosTable

執行成功後,會自動在 migration 目錄中新增一個 migration 檔案,檔名的前綴是執行當下的日期跟時間。

 2023_01_17_010715_create_demos_table.php

migration 目錄在 Laravel 專案根目錄中的這個路徑:database/migrations/

其實也可以用 make:model 指令來同時產生對應的 migration 檔案,只要多加-m一個選項,就可以了:

 php artisan make:model Demo -m

這個指令會在對應的目錄中同時產生 model 及 migration 兩個檔案。

  • Demo.php
  • 2023_01_17_011722_create_demos_table.php

每個指令都可以使用 -h 來查看用途,大家可以自己試試看有什麼其他可以用的指令。

migrate 系列

migrate 指令是用來處理資料庫相關的,通常用來建立資料庫的 Schema 或填充一些初始資料。

migrate

migrate 是這系列最基本的指令,當一個新服務要啟動的時候,通常都是透過這個指令來完成資料庫的初始化,後續的如果資料庫的 Table 或資料有變化的話,也會透過這個指令來進行。

這個指令會讀取 migrations 目錄中的 migrations 檔案,會自動抓取還沒執行過的 migration 檔案來進行資料的 migrate。基本用法如下,成功執行後資料庫就會有對應的變更了。

 php artisan migrate

migrate:fresh 及 migrate:refresh

freshrefresh 是兩個常用也常被混淆的指令。它們都可以用來讓資料庫回復初始狀態。

兩者差別在於,fresh 是比較簡潔粗暴的做法,它會直接 drop 所有的 table, 重新執行 migrate。而refresh,則是使用 rollback 的方式,一個一個的把 table rollback後,再執行 migrate。用法如下:

 php artisan migrate:fresh
 php artisan migrate:refresh

大部分時候使用 fresh 是比較簡單乾淨的做法;如果有使用到其他服務也需要 migration 來管理的話,就可以用refresh,因為它在執行 rollback 時會去呼叫 migration 檔案裡面的 down 函式,開發者可以自行在此撰寫相關的程式來處理其他服務的資料遷移。

migrate:status

這個指令可以用來查看目前 migration 的狀態,在執行 migrate 指令前可以先執行 migrate:status ,看看有哪些 migration 檔案是還沒有被執行的。

 php artisan migrate:status

大部分 migrate 相關指令會實際影響到資料庫,因此在使用前要特別注意。

migrate 指令還可以搭配 seeder 使用,可以用來寫入一些基本資料,有興趣的人可以深入研究。

其他常用指令

route:list

這個指令用來查看目前有哪些 route 可以使用,會列出所有的 url 清單及其對應的 controller,有時候系統太複雜,或是想要了解系統有哪些服務可以使用的話,可以使用這個指令。

schedule 系列

如果系統有使用到自動排程程式,可以透過 schedule:run 來直接執行,或透過 schedule:work 指令自動執行。透過 schedule:list 可以查看目前有哪些自動排程程式。

tinker

這個指令提供一個互動式的 PHP 命令列工具。執行 php artisan tinker 後會進入 tinker,在 tinker 中可以直接執行 PHP 指令。

而這個工具強大在於,它已經把整個 Laravel 專案目錄載入進去了,因此可以直接在 tinker 執行 Laravel 的函式, 對於測試相當方便,而對於想要實驗或執行 Laravel 程式,又不想要新增檔案的開發者來說相當方便。

結論

makemigrate 是我開發時最常用的指令。而我最喜歡的指令是tinker,因為它提供了一個環境,可以讓我輕易的操作系統,以維護跟測試的角度來說,相當方便。

當然,Laravel Artisan 還有很多指令可以使用,礙於篇幅這篇只挑選出幾個我平常比較經常使用的指令做介紹,另外 Laravel 每次推出新版時,多少會更動 Artisan 中的指令,大家可以自行 list 或多多利用 -h 來了解並學習有那些功能可以使用! 下次有機會可以介紹自定義指令的做法。

參考

【Larave學習書籍】 Laravel 啟動與運行(第二版)