這篇會將統一整理一些 Laravel 常用函數的小知識。
Pluck
- 可以直接獲取需要的欄位值。
- 當它接在 query builder 上,會自動下 select 的指令。
- pluck 完以後,已經是 collect([]) 的結果,因此可以直接
->all()
結果出來。
Collapse
- 可以將多維資料轉為一維資料。
toArray() 與 insert
由於 toArray()
是 recursive 的函數,因此可以搭配 insert
一次處理多筆的特性,可以節省掉很多 query 。
//舊的
$models->each(function ($model) { LogRecruitCardProcess::insert($model->toArray()); });
//新的
LogRecruitCardProcess::insert($models->toArray());
SQL 的效能瓶頸
與資料庫互動時,應時時注意取出資料過大時該怎麼辦,即使看似只是一個小地方。舉例來說,與其先 SELECT 後再將符合條件的進行 UPDATE,不如先把符合條件的資料紀錄下來並一次 UPDATE。這樣如果撈出500筆資料,用前者的方式最多執行 1+500次,而後者則只需 1+1 次。
map() 與 fn
利用 map() 與 fn 直接處理符合的資料。
private function getData(int $idNo, Collection $dataFlow): array
{
return $dataFlow->filter(fn (Subprocess $process) => $process->idno == $idNo)
->map(fn (Subprocess $subprocess) => [
'id' => (string) $subprocess->id,
'name' => $subprocess->name,
])->toArray();
}
預設環境變數
在 Laravel中 ,設定預設環境變數的載入方法紀錄在 bootstrap/app.php
裡面。
$app->afterLoadingEnvironment(function () use ($app) {
// 載入不同環境設定
Dotenv\\Dotenv::createMutable($app->environmentPath(), $app->environmentFile() . '.' . env('APP_ENV'))->safeLoad();
// 載入主機環境設定
Dotenv\\Dotenv::createMutable('/opt')->safeLoad();
});