Vapor文档学习廿一:FLUENT - Query

Query 类贯穿Fluent交互的整个过程,无论是使用.find()查询数据还是将数据保存到数据库,都要用到Query

Querying Models

遵守Model协议的类型都会有一个静态方法.query()

let query = try User.query()

这就创建了一个.query()

No Database

使用 try调用.query()方法是因为如果Model对应的数据库不存在就会抛出异常。

User.database = drop.database

Model作为preparation的时候这个属性会自动添加。

Fileter

大多数查询都会进行数据过滤(条件查询)。

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

上面是一个简单的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"])

这里只会返回DogFerret类型的数据。相反则是notIn

Contains

部分匹配的过滤条件也可以使用:

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

Retrieving

有两种方法进行查询。

All

all()进行整体匹配,返回所有满足查询条件的[Model]数组。下面的例子会返回所有age>21user

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

First

first()会匹配第一个满足查询条件的数据,返回的是Model?类型,下面返回的是一个user

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

Union

联合查询,即使用其他Model辅助查询。结果会返回[Model]或者Model?

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

上面就是用User集合与Pet集合联合查询,返回所有拥有宠物dog或ferret的User

Keys

调用union方法查询的前提是被查询的表具有和辅助表关联的外部标识。(也就是两个表有关联的字段。)
上例中有如下关联:

users
- id
pets
- id
- user_id

外部标识的key可以通过重载提供给union

Raw Queries

由于Fluent专注于与Model进行交互,因此每个Query需要一个模型类。 如果要进行不基于Model的原始数据库查询,则应使用底层Fluent驱动程序来执行此操作。

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

<b>总结:</b>本节讲了如何进行数据查询以及过滤查询的方法。最后节后也说明了如何进行基于sql语句的原始查询方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,956评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,491评论 19 139
  • 普天同庆 举世欢腾 金鸡报晓 神州共鸣 丁酉年正月初一, 西历2017年1月28日,家人,众多朋友,以及普天下炎黄...
    学习之阅读 4,472评论 0 1
  • 《曙光》 光影明灭浮华生,乱世飞雪恨未情。 夜寒料峭人寂静,门前流水月冷清。 尘世喧嚣谁妄语?山中古刹坐仙灵。 莫...
    红尘红尘阅读 1,469评论 0 1
  • 我叫铃,我不知我是谁也不知道到我从何处来,仿佛从我有记忆开始我就一直生活这禁忌花园里, 对了这里除了我以外,几乎都...
    厄里斯阅读 8,739评论 0 0