MySQL 的 IF() 在 SQLite 會報錯。Laravel 10 Expression interface 依 Grammar 產生對應 SQL,將跨資料庫差異封裝進 class。
SQLite 測試遇到 MySQL 專屬 function 如 FIELD 會噴 no such function 錯誤,用 sqliteCreateFunction 自行補上即可。
用 saveQuietly 存資料不觸發任何事件,再透過 Builder macro 定義 fire 方法,選擇性地手動觸發 created 或其他 Eloquent event。
IAM 缺少 s3:ListBucket 時,S3 對不存在的檔案回傳 403 而非 404,[Flysystem](https://flysystem.thephpleague.com) 因此拋出例外。補上權限後 exists() 即可正常回傳 false。
PHPUnit 測試時不斷出現 gRPC "Waiting for thread pool to idle" 警告,原因是 gRPC 版本過高,降版到 1.49.0 即可消除。
不用 Docker Desktop,直接在 WSL2 安裝 Docker CE 的完整步驟,包含加入 docker 群組免 sudo、啟用 systemd 讓 Docker 開機自動啟動。
Facade 透過 getFacadeAccessor 從 Container 解析 instance 的機制,以及 bind 與 singleton 的差異。
程式裡有 sleep() 讓每次測試都要多等幾秒,可抽出 Clock class 用 Mockery spy 替換,或用 php-mock 直接 mock 內建函式,無需改動原始碼。
第三方 class constructor 需要參數時 Container 無法自動 resolve。在 ServiceProvider 用 bind 註冊,即可在任何地方 type-hint 注入。
macOS artisan tinker 用 Guzzle 噴 NSCFConstantString 錯誤,設環境變數關閉 fork safety 即可解決。