我們昨天已經做過了分頁設定,那麼今天就來試試建立關鍵字搜尋。
線上產品瀏覽系統裡除了甜點,還會有茶品類,品項可能會有好幾種,產品敘述也各不相同,可以再自己設定其他類別的產品。
public function index(Request $request)
{
// 取得來自查詢參數的關鍵字
$keyword = $request->query('keyword');
$description = $request->query('description');
// 建立查詢,篩選符合關鍵字的商品
$query = Product::query();
// 若有提供產品名稱關鍵字,則篩選商品名稱包含該關鍵字的產品
if ($keyword) {
$query->where('product_name', 'like', '%' . $keyword . '%');
}
// 若有提供產品描述的關鍵字,則篩選商品描述包含該關鍵字的產品
if ($description) {
$query->where('product_description', 'like', '%' . $description . '%');
}
// 固定每頁顯示 10 筆資料
$products = $query->paginate(10);
// 回傳篩選的結果
return response()->json($products);
}
query() 是 Laravel 中用來建立一個「查詢器物件」的功能,讓你可以依照需求加入篩選條件去設計 SQL 查詢。
query() 就像是在餐廳裡準備點餐的時候,先拿起「菜單」。
雖然你還沒選擇餐點,但你已經準備好了要開始挑選。
例如:
Product::query()
就是告訴系統:「我要開始從 Product 這個資料表裡查資料,請準備好!」
$query = Product::query(); // 建立查詢
則是告訴系統:「我打算從 Product 資料表查詢資料,但具體要查什麼還沒決定,後面會再一步步加上篩選條件。」
where() 是用來加入篩選條件的,只有符合條件的資料才會被查詢出來。
而 like 是 SQL 中的運算符,適合用來做部分匹配搜尋,例如想找到名稱裡包含某個字的資料。
where() 就像是在菜單上挑選特定類型的餐點。
更多相關資訊可以參考以下文章: