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

Wei*_*uan 3 node.js sequelize.js

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

Post.belongsTo(models.User)
Run Code Online (Sandbox Code Playgroud)

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

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

Post.create({
    UserId: 1,
})
Run Code Online (Sandbox Code Playgroud)

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

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

Post.create({
    userId: 1,
})
Run Code Online (Sandbox Code Playgroud)

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

Ell*_*key 6

当您未在模型上定义列时,将使用模型名称并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;
};
Run Code Online (Sandbox Code Playgroud)