在Sequelize中创建关联模型时,为什么要使用大写键?

时间:2019-03-21 02:53:43

标签: node.js sequelize.js

我有两个模型User和Post,定义了如下关联模型:

Post.belongsTo(models.User)

这意味着帖子模型属于用户,并且用户有很多帖子。因此,数据库中的posts表必须具有用于此关联的键userId。

我使用以下代码创建分配给用户的帖子:

Post.create({
    UserId: 1,
})

它将正确的数据插入数据库。

但是当我更改代码时它不起作用:

Post.create({
    userId: 1,
})

为什么模型使用大写的UserId而不是userId?

1 个答案:

答案 0 :(得分:1)

在模型上未定义列时,将使用模型名称并在末尾添加Id来生成关联字段。您可以定义模型名称的小写字母,也可以定义如下外部字段:

module.exports = (sequelize, DataTypes) => {
  const Post = sequelize.define('Post', {
    //
    userId: { //this is how you are going to use it on sequelize
      field: 'user_id', // this is how is goig to save it on the db, underscore for example
      type: DataTypes.DATE
    },
  });

  Post.associate = (models) => {
    Post.belongsTo(models.User, { as: 'User', foreignKey: 'user_id' });
  };

  return Post;
};