日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

引言

數據庫操作是應用程序不可避免的絕大多數。難怪有些老程序員總是略帶自嘲地說,“不就是個 curd 嘛,說的那么高深!”

3分鐘短文 ! Laravel拼裝SQL子查詢的最佳實現

 

的確,往簡單了說,編程不過是增刪改查數據庫。高級程序員,不過是增刪改查地高級一些。

可見這是硬功夫,必須深刻掌握。今天,我們就從一個復雜一些的嵌套式查詢說起。

學習時間

對于數據庫DBA可能更習慣從SQL的角度出發,從SQL現有的語言結構和功能上解決問題。比如查詢一個product表,要求查詢條件中,product_catagory 表的某些字段存在才能才回。

寫多了容易無解,直接上SQL:

3分鐘短文 ! Laravel拼裝SQL子查詢的最佳實現

 

大家注意那個 IN 子句,其實是一個查詢結果集,從另個表返回的。

寫SQL真的很傷神,不如用框架自帶的orm,操作起來非常人性化,拼裝也很簡單。那就拋出一個問題,Laravel如何實現上述的子查詢?

對Laravel來說,簡直不要太簡單,你只要在寫whereIn的時候,將數組使用閉包返回就可以了。代碼像這么寫:

Products::whereIn('id', function($query){
    $query->select('paper_type_id')
    ->from(with(new ProductCategory)->getTable())
    ->whereIn('category_id', ['223', '15'])
    ->where('active', 1);
})->get();

注意外層是

Products::whereIn('id', array(...))->get();

然后我們需要定制的 array,用于包裹返回值數據,那么直接用閉包就是。

$query->select('paper_type_id')->from(TABLE_NAME)->whereIn('category_id', ['223', '15'])->where('active', 1);

也是極為尋常的一條語句。注意from就是表名。我們可以使用方法將其返回,注意是字符串類型:

with(new ProductCategory)->getTable()

這一句要求你的 Products 模型內定義了關聯模型,上一句不過是獲取 product_catagory 這個表名的字符串。

不止一個方法

解決問題的方法永遠不止一個,在Laravel中你還可以不像上一節那樣,雖然很明確,寫的很標準,可是并不是所有開發者都能達到那樣的熟練度。

我們說說通用的,一般開發者所能想到的一些方法。比如獲取關聯表名那一段,改為手動指定表名,指定列名:

DB::table('users')
    ->whereIn('id', function($query)
    {
        $query->select(DB::raw('paper_type_id as blablabla'))
              ->from('product_catagory')
              ->whereIn('id', array(...))
              ->where('active', 1);
    })
    ->get();

這樣使用 DB::raw,還有 whereRaw 方法,你幾乎就是在寫原生的SQL語句了。比較直觀。缺點是,不能復用,冗余代碼多到令人發指。

寫在最后

本文通過一個SQL語句查詢在Laravel中的實現方式,解釋了laravel在拼裝SQL查詢時的自由度,使用起來非常靈活。

對于固定的查詢方式,或者經過優化的SQL語句,你大可直接發送給Laravel直接運行以便提高效率。

HAppy coding :-)

我是 @程序員小助手 ,持續分享編程知識,歡迎關注。

分享到:
標簽:查詢 Laravel SQL
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定