美文网首页
vapor学习教程-Query

vapor学习教程-Query

作者: 晓蜻蜓 | 来源:发表于2017-05-03 09:59 被阅读0次

Query

Query类对Fluent的所有交互都显得很强大。无论是使用.find()还是将数据保存到数据库中都调用到Query

Querying Models


每个符合Model的类型都会获得一个静态的 .query()方法。

let query = try User.query()

这就是创建一个用户查询Query<User>

No Database


.query()方法用try标记,因为如果Model没有设置其静态数据库属性,它可能会引发错误。

User.database = drop.database

当通过模型作为准备时,此属性将自动设置。

Filter


最常见的查询类型包括过滤数据。

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

以下是向查询添加等于过滤器。可以看到,查询可以连接过滤器。
除了等于过滤器,还有其他过滤器类型的Filter.Comparison

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

Scope


过滤器也可以在集上运行。

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

这里只有宠物狗或雪貂类型返回。相反的类型为notIn

Contains


也可以应用部分匹配的过滤器。

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

Retrieving


有两种运行查询的方法。

ALL


可以获取所有匹配的实体。这返回一个[Model]的数组.

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

First


可以获取第一个匹配实体,返回一个可选的Model?

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

Union


其他模型可以加入查询以帮助过滤,结果仍然是[模型]还是模型?用于创建查询的类型。

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

这里用户集合union到宠物集合里,只有狗或白鼬的用户将被返回。

Keys


union方法假设查询表有加入表的外键标识符。
用户和宠物的上述示例假定以下模式。

users
- id
pets
- id
- user_id

定制外键可以通过重载提供union

Raw Queries


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

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

继续学习vapor学习教程-目录

相关文章

  • vapor学习教程-Query

    Query Query类对Fluent的所有交互都显得很强大。无论是使用.find()还是将数据保存到数据库中都调...

  • vapor学习教程-Query Parameters

    Query Parameters 请求查询参数可以作为字典进行访问,也可以使用extrac进行提取参数值而不是返回...

  • Vapor学习

    通过将Vapor官方文档进行梳理,了解Vapor所涉及到的知识点 Vapor英文教程Vapor中文教程官方Github

  • Vapor文档学习廿一:FLUENT - Query

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

  • vapor学习教程-Model

    Model Model是任何应用程序模型的基本协议,特别是要持久化的模型。 Model仅适用于Vapor,在Flu...

  • vapor学习教程-Commands

    Commands 在vapor自定义控制台命令是一件简单的事 Example 要创建自定义控制台命令,我们必须先创...

  • vapor学习教程-目录

    vapor官方文档翻译,例子比较旧,但不影响学习 前面的章节已有人翻译前部分章节内容 第二章 GUIDE 2.10...

  • vapor学习教程-Group

    Route Groups 将路由分组可以轻松地将多个路由添加公用的前缀,中间件或主机。路由组有两种不同的形式:组和...

  • vapor学习教程-Collection

    Route Collections 路由集合允许将多个路由和路由组组织在不同的文件或模块中。 Example 以下...

  • vapor学习教程-Driver

    Driver Fluent 引擎下的动力来源于驱动程序,Fluent默认配有内存驱动并且有许多供应商提供了像MyS...

网友评论

      本文标题:vapor学习教程-Query

      本文链接:https://www.haomeiwen.com/subject/gmxhtxtx.html