国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

curried / 2639人閱讀

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

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

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

預(yù)熱

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

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

基本的 Eloquent Where 查詢

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

get();

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

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

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

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

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

使用 Like 關(guān)鍵字

如何實(shí)現(xiàn)模糊查詢呢?即實(shí)現(xiàn) MySQL 的 LIKE 查詢。Eloquent 提供了比 where 語句更加靈活的模糊查詢功能。通過在 where 方法中使用通配符,可以實(shí)現(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ù)。模糊查詢?cè)谖覀冃枰獙?duì)依稀記得部分?jǐn)?shù)據(jù)進(jìn)行查詢時(shí)非常實(shí)用。

提示:
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ù)存儲(chǔ)擁有靈活性,這個(gè)功能很贊。Laravel 中也可以輕松執(zhí)行對(duì) JSON 數(shù)據(jù)的查詢,這得益于 Laravel 良好的 JSON 支持。
不過在深入研究之前需要注意的一點(diǎn)是:謹(jǐn)記 JSON 列的存儲(chǔ)是 區(qū)分大小寫 的。

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

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28624.html

相關(guān)文章

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

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

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

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

    mindwind 評(píng)論0 收藏0
  • 如何在 ThinkPHP 中整合 Laravel Eloquent ORM

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

    Labradors 評(píng)論0 收藏0
  • 如何使 Laravel 項(xiàng)目中 URL 更友好化

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

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

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

    沈建明 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<