Driver
Fluent 引擎下的動力來源于驅(qū)動程序,F(xiàn)luent默認配有內(nèi)存驅(qū)動并且有許多供應商提供了像MySQL
, SQLite
, Mongo
, PostgreSQL
等數(shù)據(jù)庫的驅(qū)動程序。
Paste_Image.png
該圖顯示了使用
MySQL
的驅(qū)動程序和提供程序之間的關(guān)系霞势。 這種區(qū)別就是允許Fluent
獨立于Vapor
而使用。如果你想分離于
vapor
而獨立使用Flunet
,你就將驅(qū)動導入到你的包里榨呆,如果你使用vapor
,就將導入提供者看疗。搜索Github:
并不是所有的驅(qū)動程序都有供應商,并不是所有的驅(qū)動程序或提供者都是最新的Vapor 1.0
益涧。
Creating a Driver
Fluent
是一個強大的數(shù)據(jù)庫不可知軟件包,用于持續(xù)化模型驯鳖。它一開始的設計就是為了工作在關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫闲询。
符合Fluent.Driver
的任何數(shù)據(jù)庫將能夠為Fluent
和Vapor
提供模型。
驅(qū)動協(xié)議本身很簡單的:
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
對每個查詢都會調(diào)用此方法鸽捻。正確理解Query
中所有屬性的驅(qū)動程序工作,并返回由Node
表示的所需行泽腮,文檔或其他數(shù)據(jù)御蒲。
Schema
在數(shù)據(jù)庫預期接受模式查詢之前,將調(diào)用模式方法诊赊。對于某些NoSQL
數(shù)據(jù)庫(如MongoDB
)厚满,可以忽略這個。對于 SQL
碧磅,這是根據(jù)Schema
來調(diào)用CREATE
和其他類似命令碘箍。
Raw
這是一個可選的方法遵馆,可以被接受字符串查詢的任何Fluent
驅(qū)動程序使用。如果您的數(shù)據(jù)庫不接受此類查詢丰榴,則可能會拋出錯誤团搞。
繼續(xù)學習vapor學習教程-目錄