Vapor文檔學(xué)習(xí)廿一:FLUENT - Query

Query 類貫穿Fluent交互的整個(gè)過程慌洪,無論是使用.find()查詢數(shù)據(jù)還是將數(shù)據(jù)保存到數(shù)據(jù)庫,都要用到Query庇麦。

Querying Models

遵守Model協(xié)議的類型都會(huì)有一個(gè)靜態(tài)方法.query()

let query = try User.query()

這就創(chuàng)建了一個(gè).query()喜德。

No Database

使用 try調(diào)用.query()方法是因?yàn)槿绻鸐odel對(duì)應(yīng)的數(shù)據(jù)庫不存在就會(huì)拋出異常山橄。

User.database = drop.database

當(dāng)Model作為preparation的時(shí)候這個(gè)屬性會(huì)自動(dòng)添加。

Fileter

大多數(shù)查詢都會(huì)進(jìn)行數(shù)據(jù)過濾(條件查詢)舍悯。

let smithsQuery = try User.query().filter("last_name", "Smith")

上面是一個(gè)簡(jiǎn)單的equals查詢航棱。如你所見,可以將filter()鏈接在query()之后萌衬。
除了equals之外饮醇,還有很多其他的Filter.Comparison

let over21 = try User.query().filter("age", .greaterThanOrEquals, 21)

Scope

過濾條件的套用:

let coolPets = try Pet.query().filter("type", .in, ["Dog", "Ferret"])

這里只會(huì)返回DogFerret類型的數(shù)據(jù)秕豫。相反則是notIn朴艰。

Contains

部分匹配的過濾條件也可以使用:

let statesWithNew = try State.query().filter("name", contains: "New")

Retrieving

有兩種方法進(jìn)行查詢。

All

all()進(jìn)行整體匹配混移,返回所有滿足查詢條件的[Model]數(shù)組祠墅。下面的例子會(huì)返回所有age>21user

let usersOver21 = try User.query().filter("age", .greaterThanOrEquals, 21).all()

First

first()會(huì)匹配第一個(gè)滿足查詢條件的數(shù)據(jù)沫屡,返回的是Model?類型饵隙,下面返回的是一個(gè)user

let firstSmith = try User.query().filter("last_name", "Smith").first()

Union

聯(lián)合查詢沮脖,即使用其他Model輔助查詢金矛。結(jié)果會(huì)返回[Model]或者Model?芯急。

let usersWithCoolPets = try User.query()
    .union(Pet.self)
    .filter(Pet.self, "type", .in, ["Dog", "Ferret"])

上面就是用User集合與Pet集合聯(lián)合查詢,返回所有擁有寵物dog或ferret的User驶俊。

Keys

調(diào)用union方法查詢的前提是被查詢的表具有和輔助表關(guān)聯(lián)的外部標(biāo)識(shí)娶耍。(也就是兩個(gè)表有關(guān)聯(lián)的字段。)
上例中有如下關(guān)聯(lián):

users
- id
pets
- id
- user_id

外部標(biāo)識(shí)的key可以通過重載提供給union饼酿。

Raw Queries

由于Fluent專注于與Model進(jìn)行交互榕酒,因此每個(gè)Query需要一個(gè)模型類。 如果要進(jìn)行不基于Model的原始數(shù)據(jù)庫查詢故俐,則應(yīng)使用底層Fluent驅(qū)動(dòng)程序來執(zhí)行此操作想鹰。

if let mysql = drop.database?.driver as? MySQLDriver {
    let version = try mysql.raw("SELECT @@version")
}

<b>總結(jié):</b>本節(jié)講了如何進(jìn)行數(shù)據(jù)查詢以及過濾查詢的方法。最后節(jié)后也說明了如何進(jìn)行基于sql語句的原始查詢方法药版。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辑舷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子槽片,更是在濱河造成了極大的恐慌何缓,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件还栓,死亡現(xiàn)場(chǎng)離奇詭異碌廓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剩盒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門谷婆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辽聊,你說我怎么就攤上這事波材。” “怎么了身隐?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)唯灵。 經(jīng)常有香客問我贾铝,道長(zhǎng),這世上最難降的妖魔是什么埠帕? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任垢揩,我火速辦了婚禮,結(jié)果婚禮上敛瓷,老公的妹妹穿的比我還像新娘叁巨。我一直安慰自己,他們只是感情好呐籽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布锋勺。 她就那樣靜靜地躺著蚀瘸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庶橱。 梳的紋絲不亂的頭發(fā)上贮勃,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音苏章,去河邊找鬼寂嘉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛枫绅,可吹牛的內(nèi)容都是我干的泉孩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼并淋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寓搬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起预伺,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤订咸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后酬诀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脏嚷,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年瞒御,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了父叙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肴裙,死狀恐怖趾唱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜻懦,我是刑警寧澤甜癞,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站宛乃,受9級(jí)特大地震影響悠咱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜征炼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一析既、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谆奥,春花似錦眼坏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檐蚜。三九已至,卻和暖如春囤屹,著一層夾襖步出監(jiān)牢的瞬間熬甚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工肋坚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乡括,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓智厌,卻偏偏與公主長(zhǎng)得像诲泌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铣鹏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法敷扫,類相關(guān)的語法,內(nèi)部類的語法诚卸,繼承相關(guān)的語法葵第,異常的語法,線程的語...
    子非魚_t_閱讀 31,602評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理合溺,服務(wù)發(fā)現(xiàn)卒密,斷路器,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139
  • 普天同慶 舉世歡騰 金雞報(bào)曉 神州共鳴 丁酉年正月初一棠赛, 西歷2017年1月28日哮奇,家人,眾多朋友睛约,以及普天下炎黃...
    學(xué)習(xí)之閱讀 900評(píng)論 0 1
  • 《曙光》 光影明滅浮華生鼎俘,亂世飛雪恨未情。 夜寒料峭人寂靜辩涝,門前流水月冷清贸伐。 塵世喧囂誰妄語?山中古剎坐仙靈怔揩。 莫...
    紅塵紅塵閱讀 221評(píng)論 0 1
  • 我叫鈴棍丐,我不知我是誰也不知道到我從何處來,仿佛從我有記憶開始我就一直生活這禁忌花園里沧踏, 對(duì)了這里除了我以外,幾乎都...
    厄里斯閱讀 2,863評(píng)論 0 0