vapor學(xué)習(xí)教程-Query

Query

Query類對(duì)Fluent的所有交互都顯得很強(qiáng)大。無論是使用.find()還是將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中都調(diào)用到Query土砂。

Querying Models


每個(gè)符合Model的類型都會(huì)獲得一個(gè)靜態(tài)的 .query()方法示罗。

let query = try User.query()

這就是創(chuàng)建一個(gè)用戶查詢Query<User>

No Database


.query()方法用try標(biāo)記督赤,因?yàn)槿绻?code>Model沒有設(shè)置其靜態(tài)數(shù)據(jù)庫(kù)屬性蛤签,它可能會(huì)引發(fā)錯(cuò)誤。

User.database = drop.database

當(dāng)通過模型作為準(zhǔn)備時(shí)师痕,此屬性將自動(dòng)設(shè)置溃睹。

Filter


最常見的查詢類型包括過濾數(shù)據(jù)。

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

以下是向查詢添加等于過濾器胰坟∫蚱可以看到,查詢可以連接過濾器笔横。
除了等于過濾器竞滓,還有其他過濾器類型的Filter.Comparison

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

Scope


過濾器也可以在集上運(yùn)行吹缔。

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

這里只有寵物狗或雪貂類型返回商佑。相反的類型為notIn

Contains


也可以應(yīng)用部分匹配的過濾器厢塘。

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

Retrieving


有兩種運(yùn)行查詢的方法茶没。

ALL


可以獲取所有匹配的實(shí)體。這返回一個(gè)[Model]的數(shù)組.

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

First


可以獲取第一個(gè)匹配實(shí)體晚碾,返回一個(gè)可選的Model?

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

Union


其他模型可以加入查詢以幫助過濾礁叔,結(jié)果仍然是[模型]還是模型?用于創(chuàng)建查詢的類型迄薄。

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

這里用戶集合union到寵物集合里,只有狗或白鼬的用戶將被返回煮岁。

Keys


union方法假設(shè)查詢表有加入表的外鍵標(biāo)識(shí)符讥蔽。
用戶和寵物的上述示例假定以下模式。

users
- id
pets
- id
- user_id

定制外鍵可以通過重載提供union画机。

Raw Queries


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

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

繼續(xù)學(xué)習(xí)vapor學(xué)習(xí)教程-目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荚醒,隨后出現(xiàn)的幾起案子芋类,更是在濱河造成了極大的恐慌,老刑警劉巖界阁,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侯繁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡泡躯,警方通過查閱死者的電腦和手機(jī)贮竟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門丽焊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咕别,你說我怎么就攤上這事技健。” “怎么了惰拱?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵雌贱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我弓颈,道長(zhǎng)帽芽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任翔冀,我火速辦了婚禮导街,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纤子。我一直安慰自己搬瑰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布控硼。 她就那樣靜靜地躺著泽论,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卡乾。 梳的紋絲不亂的頭發(fā)上翼悴,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音幔妨,去河邊找鬼鹦赎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛误堡,可吹牛的內(nèi)容都是我干的古话。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼锁施,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼陪踩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悉抵,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肩狂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后姥饰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婚温,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年媳否,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栅螟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荆秦。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖力图,靈堂內(nèi)的尸體忽然破棺而出步绸,到底是詐尸還是另有隱情,我是刑警寧澤吃媒,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布瓤介,位于F島的核電站,受9級(jí)特大地震影響赘那,放射性物質(zhì)發(fā)生泄漏刑桑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一募舟、第九天 我趴在偏房一處隱蔽的房頂上張望祠斧。 院中可真熱鬧,春花似錦拱礁、人聲如沸琢锋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吴超。三九已至,卻和暖如春鸯乃,著一層夾襖步出監(jiān)牢的瞬間鲸阻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工缨睡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赘娄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓宏蛉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親性置。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拾并,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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