嘿!今天我們想聊的是 Laravel 的 Query Scopes!
透過 Query Scopes 這個功能,可以將查詢條件 where
封裝成簡單且可重複使用的方法,讓程式碼更簡潔易讀。
Query Scopes 有兩個小幫手哦,分別是 Local Scopes 和 Global Scopes!
這位小幫手會在你手動告知的時候出現!
比如說,如果你想找所有「紅色的玩具」,你可以告訴局部小幫手來幫忙。
查詢方式是創建一個以 scope 為開頭加上要查詢的條件做結尾的方法名稱 scopeRed
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Toy extends Model
{
public function scopeRed($query): Builder
{
return $query->where('color', 'red');
}
}
這位小幫手會自動幫你找所有的「大玩具」。
比如說,在你打開玩具箱,它都會幫你篩選出來!
創建 Global Scopes,使用Artisan 指令 make:scope
,該命令會將生成的範圍放在應用程式的 app/Models/Scopes
目錄中:
php artisan make:scope BigToyScope
Scope
介面中產生 apply
方法,我們就可以根據我們的需求添加 where
約束或其他類型的子句:
namespace App\Models\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class BigToyScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
return $builder->where('size', 'large');
}
}
如果你想找所有「紅色的玩具」,你只需要這樣做:
$redToys = Toy::red()->get();
太簡單了!這樣就能輕鬆找到所有紅色的玩具啦!
全局小幫手會自動幫你篩選出「大玩具」。你不用每次都告訴他,只要這樣:
$bigToys = Toy::all();
參考資料
踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!
權杖皇后:鼓勵著我們保持積極的態度,並以自信和熱情去追求自己的目標
There is no time for cut-and-dried monotony. There is time for work. And time for love. That leaves no other time.
沒有時間讓你做一成不變的單調事,因為時間是用來工作與戀愛的。
—— 可可.香奈兒