昨天參考別人的網址是如何設計的 ,排序的方式參數都是使用 sort
,由於它們都有客製化的排序方式。比如說依照出版日期...
我一樣打算做自由度高一點,透過使用 sorts
(就是要跟別人不一樣 哈哈哈xD) 參數來操作。此參數的值以逗號分隔的排序欄位,並且可以使用「:」分隔,將排序方向附加到每個排序欄位。
asc
表示升序或 desc
表示降序。
格式
大約類似像這樣!
/api/animal?sorts=name:asc,id:desc
name 欄位進行排序升序(小->大),再由id倒序(大->小)排列
撰寫程式
繼續把查詢功能製作完整!
app/Http/Controllers/AnimalController.php
public function index(Request $request)
{
// 設定預設值
$marker = isset($request->marker) ? $request->marker : 1;
$limit = isset($request->limit) ? $request->limit : 10;
$query = Animal::query();
// 篩選欄位條件
if (isset($request->filters)) {
$filters = explode(',', $request->filters);
foreach ($filters as $key => $filter) {
list($criteria, $value) = explode(':', $filter);
$query->where($criteria, $value);
}
}
//排列順序
if (isset($request->sort)) {
$sorts = explode(',', $request->sort);
foreach ($sorts as $key => $sort) {
list($criteria, $value) = explode(':', $sort);
if ($value == 'asc' || $value == 'desc') {
$query->orderBy($criteria, $value);
}
}
} else {
$query->orderBy('id', 'asc');
}
$animals = $query->where('id', '>=', $marker)->paginate($limit);
return response($animals, Response::HTTP_OK);
}
終於把查詢功能做完了!再次強調設計方法有很多。如果日後有時間再來補充 篩選、排序其他格式的設計。
建議如果一開始想先做個可以動的成品,可以先照著做就好,學習門檻比較低,以後經驗多了!自然就可以判斷要怎麼設計比較好~
站長您好
拜讀了你的 使用 Laravel 打造 RESTful API
目前進度到第12篇
想請教您
到12篇為止的查詢功能
查詢單一、全部資料、查詢預設起始條件、分頁查詢、分頁篩選
能同時存在嗎
例如:
/api/animal?filters=name:黑,和 /animal?sorts=name:asc,id:desc
這兩條api可以同時存在嗎
如果你有看到的話,還請您撥空解惑🙏
謝謝
您好!
依照範例的寫法可以同時存在喔!
查詢資源列表,篩選以及排序可以一起使用如下網址,使用& 連結
/api/animal?filters=name:黑&sorts=name:asc,id:desc
如要查詢這些資料的第2頁可以在使用 page 如下範例
/api/animal?filters=name:黑&sorts=name:asc,id:desc&page=2
感謝您的提問!如果有問題歡迎在提出感謝^^
站長您好
剛再嘗試了一下
我把
// 篩選欄位條件
$query->where($criteria, $value);這段
改回 $query->where($criteria, ‘like’, “%$value%”);
這樣我的 name:黑 就搜得到了
因為我新增了好幾筆小黑、小小黑、中黑的資料
謝謝你的回答🙏
ps 在這邊回應你,幫你的網站加個小小的人氣👍,謝謝
ps
請問網址那段背景紅色區塊是怎麼打出來的
這邊使用 code可以變成程式碼區塊
以下改為半行符號就可以囉
<code></code>
哈哈哈謝謝你!我發現我寫錯了~之前有注意到忘記改
你這樣改完全沒有正確,這樣改可以模糊查詢欄位資料
我在找時間改一下!謝謝你 🙂