Sequelize ORM 现有表如何使用

一、 在mysql中创建一个表 或者随便找一个现有的表

已经有了一张叫做xw_posts的表。表里的字段非常简单,大家可以自己建一下

CREATE TABLE `xw_posts` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `category_id` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

INSERT INTO `xw_posts` (`id`, `name`, `category_id`)
VALUES
    (1,'天生我材必有用',1),
    (2,'一天能吃三斤肉',2);

在这里插入图片描述

这张表的命名显然是不符合Sequelize规范的。
里面关联分类表的字段是下划线命名,也不符合命名规范。
而且里面还缺少createdAt和updatedAt时间字段。

二、项目中使用创建一个迁移模型生成模板,生成模型的时候,同时也会生成迁移文件。但是我们现在已经有数据表了,不需要再去建表了,所以将迁移文件直接删掉

sequelize model:generate --name Post --attributes category_id:integer,name:string

三、更改模板

1、模型的名字,我们叫做Post。这明显和数据表对不上,但是没关系,不要紧。增加tableName,指定好模型对应的表名即可。
Post.init({
  category_id: DataTypes.INTEGER,
  name: DataTypes.STRING
}, {
  sequelize,
  modelName: 'Post',
  tableName: 'xw_posts',    // 指定表名
});

2、另外我们这张表,没有时间字段,不需要createdAt和updatedAt,继续增加配置
Post.init({
  category_id: DataTypes.INTEGER,
  name: DataTypes.STRING
}, {
  sequelize,
  modelName: 'Post',
  tableName: 'xw_posts',    // 指定表名
  timestamps: false           // 不需要时间
});

3、设置关联外键

我们的Post模型,它与是属于分类的。但是关联字段叫做category_id(默认关联字段为:post_id),明显也不符合默认关联字段的命名。没有关系,定义一个一对多关联,只需要用foreignKey定义一下,关联的字段叫什么名字就可以了。

static associate(models) {
  // define association here
  models.Post.belongsTo(models.Category, { foreignKey: 'category_id', as: 'category' });
}

四、验证

到这里为止,模型就全部改造完成了。我们添加个路由测试下,新建routes/posts.js

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值