laravel查詢建構器Query Builder疊加鍊式呼叫的方法教學課程

小云云
發布: 2023-03-17 21:14:01
原創
2171 人瀏覽過

本文主要介紹給大家關於laravel技巧之查詢建構器Query Builder疊加鍊式呼叫的相關資料,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作有一定的參考學習價值,希望能幫助到大家。

查詢建構器簡介

Laravel查詢建構器(query builder)提供方便、流暢的接口,用來建立及執行資料庫查找語法

使用PDO參數綁定,以保護應用程式免於SQL注入。因此傳入的參數不需額外轉義特殊字元

基本上可以滿足所有的資料庫操作,而且在所有支援的資料庫系統上都可以執行

引言

#今天要跟大家介紹一下laravel查詢構造器的一個小技巧,在官方文件範例中沒有詳細提到,也不是啥高端技巧,可能很多人在用了,不知道的同學可以看看。

在業務程式碼中經常會根據不同條件來查詢,舉個簡單例子,我們現在要查詢用戶列表,按時間倒序排列,可能會有status和type作為限定條件。

一開始我是這樣寫的


 if($status && $type) {
 $users = User::where('status', $status)->where('type', $type)->latest()->get();
 } else if ($status) {
 $users = User::where('status', $status)->latest()->get(); 
 } else if ($type) {
 $users = User::where('status', $type)->latest()->get();
 } else {
 $users = User::latest()->get(); 
 }
登入後複製


這個程式碼真的很醜陋,很多公用程式碼,例如->latest()->get(),寫了四遍,如果產品說今天我們要正序排列,那你得改四個地方。雖然用編輯器改一下也很快,不過要知道這只是個最簡單的例子。

看了下文檔有個when方法進行條件判斷,一堆閉包也不是很理想。我堅信肯定有更優雅的寫法,於是上stackoverflow搜了一波,果然萬能的歪果仁給了我答案。

改進後的寫入:


 $query = User::query();
 // 如果用DB: $query = DB::table('user'); 
 if ($status) {
  $query->where('status', $status);
 }
 if ($type) {
  $query->where('type', $type);
 } 
 $users = $query->latest()->get();
登入後複製


以變數儲存查詢建構器實例,然後疊加約束條件,最後get集合。公共部分放在首尾,結構清晰,是不是高下立判啊?

而且我們還可以把$query當成參數傳入方法或函數中,將公共邏輯封裝在一起,方便多處呼叫:


 function foo($query) {
  $query->with(['girl', 'gay'])
    ->latest()
    ->get();
 } 
 $query = User::query();
 $users = foo($query);
登入後複製


這種寫法有一個注意事項,一旦你在$query上呼叫where等約束方法,就會改變此query,有時候我們需要提前clone一個query。

舉例說明,例如我們同時要拿到type為1和2的users


#
 $query_1 = User::query();
 $query_2 = clone $query_1; 
 $users_1 = $query_1->where('type', 1)->latest()->get();
 $users_2 = $query_2->where('type', 2)->latest()->get();
 // 错误 $users_2 = $query_1->where('type', 1)->latest()->get();
 // 这样写得到得是type = 1 and $type = 2
登入後複製


laravel的文檔裡面雖然沒有寫這個範例,但我提了一下:

你可以用DB facade 的table 方法開始查詢。這個 table 方法針對查詢表傳回一個查詢建構器實例,讓你在查詢時鍊式呼叫更多約束,並使用 get 方法來取得最終結果。

相關推薦:

有關查詢建構器的文章推薦7篇

Laravel學習-資料庫操作與查詢建構器的範例程式碼分享

ThinkPHP5的查詢建構器工作原理

以上是laravel查詢建構器Query Builder疊加鍊式呼叫的方法教學課程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!