濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > laravel技巧之查詢構(gòu)造器Query Builder疊加鏈?zhǔn)秸{(diào)用的方法

laravel技巧之查詢構(gòu)造器Query Builder疊加鏈?zhǔn)秸{(diào)用的方法

熱門(mén)標(biāo)簽:400電話申請(qǐng)辦理 隨州銷(xiāo)售電銷(xiāo)機(jī)器人公司 全國(guó)各省地圖標(biāo)注點(diǎn) 福建高頻外呼防封系統(tǒng)哪家好 周口網(wǎng)絡(luò)回?fù)芡夂粝到y(tǒng) 百度地圖標(biāo)注類(lèi)型是酒店 網(wǎng)絡(luò)電話400申請(qǐng) 外呼系統(tǒng)人工客服 商丘外呼系統(tǒng)好處

查詢構(gòu)造器簡(jiǎn)介

Laravel查詢構(gòu)造器(query builder)提供方便、流暢的接口,用來(lái)建立及執(zhí)行數(shù)據(jù)庫(kù)查找語(yǔ)法

使用PDO參數(shù)綁定,以保護(hù)應(yīng)用程序免于SQL注入。因此傳入的參數(shù)不需額外轉(zhuǎn)義特殊字符

基本可以滿足所有的數(shù)據(jù)庫(kù)操作,而且在所有支持的數(shù)據(jù)庫(kù)系統(tǒng)上都可以執(zhí)行

引言

今天給大家介紹一下laravel查詢構(gòu)造器的一個(gè)小技巧,在官方文檔示例中沒(méi)有詳細(xì)提到,也不是啥高端技巧,可能很多人在用了,不知道的同學(xué)可以看看。

在業(yè)務(wù)代碼中經(jīng)常會(huì)根據(jù)不同條件來(lái)查詢,舉個(gè)簡(jiǎn)單例子,我們現(xiàn)在要查詢用戶列表,按時(shí)間倒序排列,可能會(huì)有status和type作為限定條件。

一開(kāi)始我是這樣寫(xiě)的

 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(); 
 }

這個(gè)代碼真的很丑陋,很多公共代碼,比如->latest()->get(),寫(xiě)了四遍,如果產(chǎn)品說(shuō)今天我們要正序排列,那你得改四個(gè)地方。雖然借助編輯器改一下也很快,不過(guò)要知道這只是個(gè)最簡(jiǎn)單的例子。

看了下文檔有個(gè)when方法進(jìn)行條件判斷,一堆閉包也不是很理想。我堅(jiān)信肯定有更優(yōu)雅的寫(xiě)法,于是上stackoverflow搜了一波,果然萬(wàn)能的歪果仁給了我答案。

改進(jìn)后的寫(xiě)法:

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

用變量保存查詢構(gòu)造器實(shí)例,然后在其上疊加約束條件,最后get集合。公共部分放在首尾,結(jié)構(gòu)清晰,是不是高下立判???

而且我們還可以把$query當(dāng)成參數(shù)傳入方法或函數(shù)中,將公共邏輯封裝在一起,方便多處調(diào)用:

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

這種寫(xiě)法有一個(gè)注意事項(xiàng),一旦你在$query上調(diào)用where等約束方法,就會(huì)改變此query,有時(shí)候我們需要提前clone一個(gè)query。

舉例說(shuō)明,比如我們同時(shí)要拿到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();
 // 錯(cuò)誤 $users_2 = $query_1->where('type', 1)->latest()->get();
 // 這樣寫(xiě)得到得是type = 1 and $type = 2

laravel的文檔里雖然沒(méi)有寫(xiě)這種示例,但是提了一下:

你可以使用 DB facade 的 table 方法開(kāi)始查詢。這個(gè) table 方法針對(duì)查詢表返回一個(gè)查詢構(gòu)造器實(shí)例,允許你在查詢時(shí)鏈?zhǔn)秸{(diào)用更多約束,并使用 get 方法獲取最終結(jié)果

題外話

以前聽(tīng)一些老前輩說(shuō)他們不要只會(huì)百度的程序員,當(dāng)時(shí)感覺(jué)真裝嗶,不都是搜索引擎,因?yàn)槲夷菚r(shí)不用google?,F(xiàn)在我也不愿意和只會(huì)百度的共事了,百度只是個(gè)廣告搜索嘛,搜出來(lái)的都是些啥玩意。

google、stackoverflow真是個(gè)好東西,很多歪果仁知識(shí)豐富,解答專(zhuān)業(yè),從計(jì)算機(jī)歷史到操作系統(tǒng)、數(shù)據(jù)庫(kù)、各種編程語(yǔ)言,幫我de了好多bug。在segmentfault這么打廣告是不是不好,溜了!

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

Reference:

  1. How to create multiple where clause query using Laravel Eloquent? - stackoverflow
  2. Model::query - laravelAPI
您可能感興趣的文章:
  • Laravel框架DB facade數(shù)據(jù)庫(kù)操作詳解
  • Laravel5.7 數(shù)據(jù)庫(kù)操作遷移的實(shí)現(xiàn)方法
  • PHP開(kāi)發(fā)框架Laravel數(shù)據(jù)庫(kù)操作方法總結(jié)
  • Laravel5中實(shí)現(xiàn)模糊匹配加多條件查詢功能的方法
  • 使用Laravel中的查詢構(gòu)造器實(shí)現(xiàn)增刪改查功能
  • 解決laravel查詢構(gòu)造器中的別名問(wèn)題
  • Laravel 5框架學(xué)習(xí)之Eloquent (laravel 的ORM)
  • 詳解PHP的Laravel框架中Eloquent對(duì)象關(guān)系映射使用
  • Laravel 5框架學(xué)習(xí)之Eloquent 關(guān)系
  • Laravel Eloquent ORM 實(shí)現(xiàn)查詢表中指定的字段
  • Laravel5.7 Eloquent ORM快速入門(mén)詳解
  • laravel框架數(shù)據(jù)庫(kù)操作、查詢構(gòu)建器、Eloquent ORM操作實(shí)例分析

標(biāo)簽:南寧 十堰 佛山 定西 樂(lè)山 海南 迪慶 六安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《laravel技巧之查詢構(gòu)造器Query Builder疊加鏈?zhǔn)秸{(diào)用的方法》,本文關(guān)鍵詞  laravel,技巧,之,查詢,構(gòu)造,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《laravel技巧之查詢構(gòu)造器Query Builder疊加鏈?zhǔn)秸{(diào)用的方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于laravel技巧之查詢構(gòu)造器Query Builder疊加鏈?zhǔn)秸{(diào)用的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    榆中县| 海口市| 剑川县| 政和县| 商城县| 县级市| 中卫市| 贡觉县| 巴塘县| 曲阜市| 庐江县| 花莲市| 巴中市| 武义县| 哈巴河县| 平塘县| 阿巴嘎旗| 贺兰县| 宁河县| 咸丰县| 哈密市| 余江县| 治县。| 静宁县| 漠河县| 连云港市| 天等县| 郸城县| 屏边| 时尚| 石泉县| 海南省| 宣恩县| 娄烦县| 科技| 新化县| 榆社县| 泾源县| 永吉县| 肥城市| 中山市|