Sequelize之Model模型定義

概念

模型是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。因此可以很容易地往裏面添加方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章