lizuncong (lizuncong) · GitHubI am a strong believer in reverse engineering. lizuncong has 42 repositories available. Follow their code on GitHub.https://github.com/lizuncong
概念
模型是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。因此可以很容易地往里面添加方法。