亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

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

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

引言

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

3分鐘短文 ! Laravel拼裝SQL子查詢的最佳實現(xiàn)

 

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

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

學(xué)習(xí)時間

對于數(shù)據(jù)庫DBA可能更習(xí)慣從SQL的角度出發(fā),從SQL現(xiàn)有的語言結(jié)構(gòu)和功能上解決問題。比如查詢一個product表,要求查詢條件中,product_catagory 表的某些字段存在才能才回。

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

3分鐘短文 ! Laravel拼裝SQL子查詢的最佳實現(xiàn)

 

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

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

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

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,用于包裹返回值數(shù)據(jù),那么直接用閉包就是。

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

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

with(new ProductCategory)->getTable()

這一句要求你的 Products 模型內(nèi)定義了關(guān)聯(lián)模型,上一句不過是獲取 product_catagory 這個表名的字符串。

不止一個方法

解決問題的方法永遠(yuǎn)不止一個,在Laravel中你還可以不像上一節(jié)那樣,雖然很明確,寫的很標(biāo)準(zhǔn),可是并不是所有開發(fā)者都能達(dá)到那樣的熟練度。

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

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語句了。比較直觀。缺點是,不能復(fù)用,冗余代碼多到令人發(fā)指。

寫在最后

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

對于固定的查詢方式,或者經(jīng)過優(yōu)化的SQL語句,你大可直接發(fā)送給Laravel直接運行以便提高效率。

HAppy coding :-)

我是 @程序員小助手 ,持續(xù)分享編程知識,歡迎關(guān)注。

分享到:
標(biāo)簽:查詢 Laravel SQL
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

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

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定