成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

需要掌握的 Laravel Eloquent 搜索技術(shù)

curried / 2645人閱讀

摘要:預(yù)熱搜索功能是應(yīng)用的重要組成模塊。本文將帶領(lǐng)大家學(xué)習(xí)和在搜索模塊中設(shè)計的相關(guān)技術(shù)。基本的查詢作為首個要講解的搜索功能,我們先不涉及新知識點。其次,在第個函數(shù)內(nèi)加入了占位符,這種語法即為參數(shù)綁定,它的主要作用是用于防止注入。

本文同步至個人博客 需要掌握的 Laravel Eloquent 搜索技術(shù),轉(zhuǎn)載請注明出處。

當(dāng)我們的應(yīng)用程序訪問較少時(例如在項目初期階段),直接進(jìn)行項目編碼就可以解決大多數(shù)問題。項目中的搜索功能也是如此,沒必要在一開始就引入完整的第三方類庫進(jìn)行搜索功能支持。大多數(shù)情況下使用 Eloquent 的查詢功能就可以完成基本的搜索處理。

預(yù)熱

搜索功能是應(yīng)用的重要組成模塊。優(yōu)秀的設(shè)計,可以幫助我們的用戶簡單快速的檢索想要的信息。因此,在項目中對搜索功能的設(shè)計,無論前端還是后端都需要提供良好的解決方案。
本文不會探討搜索功能的前端及 UI 設(shè)計等內(nèi)容。若需要學(xué)習(xí)前端在搜索設(shè)計方面的知識,可以閱讀 Instant AJAX Search with Laravel and Vue 這篇文章。

本文將帶領(lǐng)大家學(xué)習(xí) MySQL 和 Eloquent 在搜索模塊中設(shè)計的相關(guān)技術(shù)。

基本的 Eloquent Where 查詢

作為首個要講解的搜索功能,我們先不涉及新知識點。在 Laravel 中可以使用 where 方法實現(xiàn)對給定字段和給定值進(jìn)行比較查詢,就是這樣簡單。

get();

甚至,你可以傳入一個 arraywhere 方法里,對多個字段進(jìn)行比較查詢。它的工作原理,類似 &&(與查詢) 運算符,當(dāng)所有條件都為 true 時,返回結(jié)果集:

 "foo"],
            ["published" => true],
        ])->get();

如果需要實現(xiàn)類似 ||(或查詢) 查詢,則可以使用 Eloquent 查詢構(gòu)造器提供的 orWhere 方法。

orWhere("description", "foo")->get();

有關(guān) where 語句的使用方法,強(qiáng)烈建議閱讀 Laravel 「查詢構(gòu)造器 - Where 語句」 文檔。

使用 Like 關(guān)鍵字

如何實現(xiàn)模糊查詢呢?即實現(xiàn) MySQL 的 LIKE 查詢。Eloquent 提供了比 where 語句更加靈活的模糊查詢功能。通過在 where 方法中使用通配符,可以實現(xiàn)模糊查詢功能。讓我們看看 % 通配符:

get();

// 獲取以任何字符開始,但以 foo 結(jié)尾的文章
$result = Post::where("title", "like", "%{$keyword}")->get();

// 獲取包含 foo 的文章
$result = Post::where("title", "like", "%{$keyword}%")->get();

我們可以看到 Eloquent 的模糊查詢功能十分靈活。即可以查詢以指定字符開始或結(jié)尾的數(shù)據(jù),也可以查詢包含指定字符的數(shù)據(jù)。模糊查詢在我們需要對依稀記得部分?jǐn)?shù)據(jù)進(jìn)行查詢時非常實用。

提示:
A big note here: Probably you are using a collation that ends with _ci. That means it’s case-insensitive. Whether you type FOO, Foo, fOO, etc., you get the same result!

當(dāng)然,上面的查詢功能都可以在文檔中找到。

在 JSON 列中搜索

JSON 類型讓數(shù)據(jù)存儲擁有靈活性,這個功能很贊。Laravel 中也可以輕松執(zhí)行對 JSON 數(shù)據(jù)的查詢,這得益于 Laravel 良好的 JSON 支持。
不過在深入研究之前需要注意的一點是:謹(jǐn)記 JSON 列的存儲是 區(qū)分大小寫 的。

而如果我們需要查詢的數(shù)據(jù)不存在 區(qū)分大小寫 的問題,可以執(zhí)行類似下面的查詢語句:

description", "like", "%foo%")->get();

這條模糊查詢語句和前面的 where 查詢并無二致,對吧?但是如果我們的 JSON 數(shù)據(jù)存在 大小寫字符 的情況,又該如何處理呢?這種場景最適合使用 whereRaw 方法,先來看看示例,再來講解它工作原理:

"$.description") like lower(?)", ["%foo%"]);

你會注意到這條的查詢語句有些不同。

首先,除了 like 關(guān)鍵字外還多了些 SQL 語法,因為這里我們傳入的是一條 原生 SQL 表達(dá)式。
其次,在第 2 個 lower 函數(shù)內(nèi)加入了 ? 占位符,這種語法即為參數(shù)綁定,它的主要作用是用于防止 SQL 注入。

如你所見,我們將一個 array 給到 whereRaw 的第二個參數(shù),數(shù)組內(nèi)的第一個元素對應(yīng)第一個參數(shù)綁定占位符,第二個元素對應(yīng)第二個參數(shù)綁定占位符,以此類推。
這就是 whereRaw 的工作原理。

接下來將焦點集中到真正的關(guān)鍵處理:我們通過 MySQL 的 lower() 函數(shù)將待查詢的 JSON 數(shù)據(jù)等數(shù)據(jù)轉(zhuǎn)換成小寫字符,實現(xiàn) 不區(qū)分大小寫 的查詢操作。解決方案雖然實現(xiàn)起來較為麻煩,但工作良好。

依據(jù)單詞發(fā)音進(jìn)行模糊匹配

繼續(xù)探討最后一個主題,當(dāng)用戶輸入的查詢表達(dá)式包含錯誤的單詞拼寫時,該如何進(jìn)行搜索呢?查詢與給定的表達(dá)式有類似發(fā)音的語句是個不錯的主意。這種場景我們無法使用 like 關(guān)鍵字,但我們有 sound like 關(guān)鍵字。

先不必深究 sound like 的工作原理,但如果你真的對 sound like 功能感興趣可以閱讀 MySQL SOUNDS LIKE 這篇文章。所有你感興趣的內(nèi)容它都所涉及。但現(xiàn)在讓我們看看 Laravel 如何使用這個功能。

get();
提示:對 MySQL sound like 功能的支持,需要使用 5.6.8 以上的 Laravel 版本,可以查看 Laravel changelog

執(zhí)行 sound like 操作,會進(jìn)行一個發(fā)音相似性的算法,然后獲取結(jié)果集。但是這并不是我們需要關(guān)注的,我們僅需將待查詢的字符串傳給 where 語句即可。返回的結(jié)果集即會包含完全匹配的數(shù)據(jù),也會包含發(fā)音近似的數(shù)據(jù)。

總結(jié)

Laravel 為我們提供了簡單實用的查詢功能。我們可以在 Laravel 里使用 where 語句,可以使用原生 SQL 語句,甚至可以使用模糊查詢和相似查詢,所有這些查詢功能都是 Laravel 內(nèi)置提供的開箱即用,非常贊!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28624.html

相關(guān)文章

  • windows下laravel5.5手寫教程2路由Eloquent ORM操作(適合初學(xué)者)

    摘要:一路由目錄眾所周知,對于我們熟知的任何一款框架,例如路由系統(tǒng)都是極其重要的存在。文件用于定義界面的路由。定義在中的路由都是無狀態(tài)的,并且被分配了中間件組。生成的控制器為每個行為保留了方法,同時還包括了處理動作和的聲明注釋。 一、路由目錄 眾所周知,對于我們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統(tǒng)都是極其重要的存在。 對于laravel框架也一樣,對于數(shù)據(jù)庫的操作,無非...

    BlackFlagBin 評論0 收藏0
  • laravel5.5手寫教程4Eloquent ORM分頁及軟刪除

    摘要:從而達(dá)到了軟刪除。不過,你可以通過在查詢中調(diào)用方法來強(qiáng)制查詢已被軟刪除的模型方法也可以被用在關(guān)聯(lián)查詢只取出軟刪除數(shù)據(jù)會只取出軟刪除數(shù)據(jù)恢復(fù)被軟刪除的模型有時候你可能希望取消刪除一個已被軟刪除的模型。 Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM。我個人一直比較推薦于在實際操作中學(xué)習(xí),之前簡單了解了路由和Eloquent ORM的基本用法,今天...

    mindwind 評論0 收藏0
  • 如何在 ThinkPHP 中整合 Laravel Eloquent ORM

    摘要:前言之前維護(hù)的舊項目采用的,后面學(xué)習(xí)了后,覺得的功能沒有強(qiáng)大和方便,并想把里的用在里。好在的是獨立成包的,可以用于符合要求的其他系統(tǒng)中。整合要使用的是。 showImg(https://segmentfault.com/img/remote/1460000009038352); 前言 之前維護(hù)的舊項目采用的 ThinkPHP 3.2,后面學(xué)習(xí)了 Laravel 后,覺得 TP 的 Mo...

    Labradors 評論0 收藏0
  • 如何使 Laravel 項目中 URL 更友好化

    說明 cviebrock/eloquent-sluggable 是一款可對 Laravel 項目中的 URL 進(jìn)行友好化的擴(kuò)展包。 本文章由 The EST Group 成員 @Kelvin 撰寫, 首發(fā)地為 PHPHub 社區(qū). Demo Demo 截圖 showImg(http://ww1.sinaimg.cn/large/0060lm7Tgw1f2cvi683d5j30x00juad5.jp...

    JerryC 評論0 收藏0
  • Laravel 5.3 預(yù)熱:10 個你需要知道變更

    摘要:本文經(jīng)授權(quán)轉(zhuǎn)自社區(qū)說明發(fā)布臨近,大體構(gòu)建已經(jīng)完成,文檔整理完成后即可發(fā)布。附帶了一個響應(yīng)式郵件模板,通知類中唯一需要做的就是像下面這樣發(fā)送消息錯誤處理是一個可選的擴(kuò)展包,提供了完整可用的服務(wù)。 本文經(jīng)授權(quán)轉(zhuǎn)自 PHPHub 社區(qū) 說明 Laravel 5.3 發(fā)布臨近,大體構(gòu)建已經(jīng)完成,文檔整理完成后即可發(fā)布。 下面是對 Laravel 5.3 新特性的整理,不完整列表。 1、全文搜...

    沈建明 評論0 收藏0

發(fā)表評論

0條評論

curried

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<