Driver
Fluent 引擎下的动力来源于驱动程序,Fluent默认配有内存驱动并且有许多供应商提供了像MySQL
, SQLite
, Mongo
, PostgreSQL
等数据库的驱动程序。
该图显示了使用
MySQL
的驱动程序和提供程序之间的关系。 这种区别就是允许Fluent
独立于Vapor
而使用。如果你想分离于
vapor
而独立使用Flunet
,你就将驱动导入到你的包里,如果你使用vapor
,就将导入提供者。搜索Github:
并不是所有的驱动程序都有供应商,并不是所有的驱动程序或提供者都是最新的Vapor 1.0
。
Creating a Driver
Fluent
是一个强大的数据库不可知软件包,用于持续化模型。它一开始的设计就是为了工作在关系型数据库和非关系型数据库。
符合Fluent.Driver
的任何数据库将能够为Fluent
和Vapor
提供模型。
驱动协议本身很简单的:
public protocol Driver {
var idKey: String { get }
func query<T: Entity>(_ query: Query<T>) throws -> Node
func schema(_ schema: Schema) throws
func raw(_ raw: String, _ values: [Node]) throws -> Node
}
ID Key
ID键将用于为User.find()
提供功能。在SQL,它是id,在MongoDB,它是_id。
Query
Fluent
对每个查询都会调用此方法。正确理解Query
中所有属性的驱动程序工作,并返回由Node
表示的所需行,文档或其他数据。
Schema
在数据库预期接受模式查询之前,将调用模式方法。对于某些NoSQL
数据库(如MongoDB
),可以忽略这个。对于 SQL
,这是根据Schema
来调用CREATE
和其他类似命令。
Raw
这是一个可选的方法,可以被接受字符串查询的任何Fluent
驱动程序使用。如果您的数据库不接受此类查询,则可能会抛出错误。
继续学习vapor学习教程-目录