概念
模型是Sequelize中的重要部分。是數據庫表的一個抽象。在Sequelize中,模型是一個繼承了Model的類。
Sequelize中每個模型都有一個名字,這個名字可以不用與數據庫表名字相同。默認情況下,數據庫表名字是模型名字的複數形式。
比如模型名字爲User,默認的,數據表名字爲Users。這個默認行爲可以通過配置改變。
模型定義
在Sequelize中,Models可以通過以下兩種等價方式定義:
1.直接調用sequelize.define(modelName, attributes, options)方法。
2.繼承Model並且調用init(attributes,options)方法。
Model定義後,可以通過sequelize.models.modelName訪問該模型。
sequelize.define內部也是通過調用Model.init方法實現的。
Model同步
1.可以通過調用model.sync(options)同步模型和數據庫表,這個方法只能同步一個模型
User.sync():如果數據庫表不存在,則創建數據庫表,如果存在,則不做任何操作
User.sync({ force: true }):如果數據庫表已經存在,則先刪除數據庫表,然後重新創建數據表
User.sync({ alter: true }): 這個會比較數據庫表當前狀態(比如數據庫表的列及數據類型等)與模型的不同之處,然後修改數據庫表不同的地方以匹配模型。
2.可以通過調用sequelize.sync()一次同步所有模型。
刪除表
1.可以通過調用User.drop()刪除與User模型關聯的數據表,這種方式只能刪除一個表
2.可以通過調用sequelize.drop()一次刪除所有的數據庫表。
數據庫安全檢查
數據庫的同步sync及刪除drop操作都是具有破壞性的。爲了安全起見,Sequelize接受一個match選項
sequelize.sync({ force: true, match: /_test$/ })。這樣只有當數據庫名稱以_test結尾時纔會執行sync操作
時間戳Timestamps
Sequelize默認給每個model添加createdAt和updatedAt這兩個字段,數據類型均爲DataTypes.DATE。Sequelize自動管理這些字段。增加或更新一條記錄時,Sequelize會自動將當前時間戳賦值給createdAt和updatedAt。這些都是通過Sequelize完成的,並不是SQL出發的。如果直接通過sql語句查詢或更新記錄,這些字段並不會自動更新。
Models定義爲Class的優勢
Sequelize Models是ES6的classes。因此可以很容易地往裏面添加方法。