Sequelize.js Sequelize在JS中使用驼峰大小写,但在表名中使用下划线

Sequelize.js Sequelize在JS中使用驼峰大小写,但在表名中使用下划线,sequelize.js,Sequelize.js,是否可以在列名上加下划线(postgres),但JavaScript getter必须符合语言标准?不直接在列定义中,但您可以查看getter和setter: 尽管此选项要求您手动为每个列定义一个getter和setter,但它不能自动执行。此外,getter和实际列名都将在对象上可用 我认为github上的这个功能有问题,但我现在找不到 实际链接 对于以后发现此问题的任何人,现在都可以明确定义数据库字段的名称: var User = sequelize.define('user', {

是否可以在列名上加下划线(postgres),但JavaScript getter必须符合语言标准?

不直接在列定义中,但您可以查看getter和setter:

尽管此选项要求您手动为每个列定义一个getter和setter,但它不能自动执行。此外,getter和实际列名都将在对象上可用

我认为github上的这个功能有问题,但我现在找不到


实际链接

对于以后发现此问题的任何人,现在都可以明确定义数据库字段的名称:

var User = sequelize.define('user', {
  isAdmin: {
    type: DataTypes.BOOLEAN,
    field: 'is_admin'
  }
});

您可以使用更新版本的Sequelize为模型(表)和键(字段)实现这一点

我使用的是4.29.2,我的模型如下所示:

const Post = sequelize.define('post', {
    id: {
      type: DataTypes.UUID,
      defaultValue: DataTypes.UUIDV4,
      primaryKey: true,
      allowNull: false,
    },
    isActive: {
      type: DataTypes.BOOLEAN,
      defaultValue: true,
      allowNull: false,
      field: 'is_active',
    },
    isDeleted: {
      type: DataTypes.BOOLEAN,
      defaultValue: false,
      allowNull: false,
      field: 'is_deleted',
    },
  }, {
    indexes: [
      {
        unique: false,
        fields: ['is_active'],
      },
      {
        unique: false,
        fields: ['is_deleted'],
      },
    ],
    defaultScope: {
      where: {
        isActive: true,
        isDeleted: false,
      },
    },
  });

const PostComments = sequelize.define('postComments', {
    id: {
      type: DataTypes.UUID,
      defaultValue: DataTypes.UUIDV4,
      primaryKey: true,
      allowNull: false,
    },
    postId: {
      type: DataTypes.UUID,
      allowNull: false,
      field: 'post_id',
    },
    comment: {
      type: DataTypes.STRING,
      allowNull: false,
    },
  }, {
    tableName: 'post_comments',
    indexes: [
      {
        unique: false,
        fields: ['post_id'],
      },
    ],
  });


  Post.hasMany(PostComments, {
    foreignKey: 'postId',
    constraints: true,
    as: 'comments',
  });

  PostComments.belongsTo(Post, {
    foreignKey: 'postId',
    constraints: true,
    as: 'post',
  });
如您所见,我正在为模型(表)设置tableName值,并为键(字段)设置字段值

当我跑步时:

sequelize.query('SET FOREIGN_KEY_CHECKS = 0', { raw: true })
  .then(() => {
    conn.sync({ force: true }).then(() => {
      console.log('DONE');
    });
  });
结果是:

Executing (default): SET FOREIGN_KEY_CHECKS = 0
Executing (default): DROP TABLE IF EXISTS `post_comments`;
Executing (default): DROP TABLE IF EXISTS `post`;
Executing (default): CREATE TABLE IF NOT EXISTS `post` (`id` CHAR(36) BINARY NOT NULL , `is_active` TINYINT(1) NOT NULL DEFAULT true, `is_deleted` TINYINT(1) NOT NULL DEFAULT false, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`) ENGINE=InnoDB;
Executing (default): CREATE TABLE IF NOT EXISTS `post_comments` (`id` CHAR(36) BINARY NOT NULL , `post_id` CHAR(36) BINARY NOT NULL, `comment` VARCHAR(255) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`post_id`) REFERENCES `post` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
2019+ 在Sequelize v5中,现在可以使用
下划线:true
属性



糟糕,我害怕this@futbolpal现在可以为属性定义一个字段,因此您可以执行类似于
userId:{type:DataTypes.INTEGER,field:'user_id'}
@MickHansen的操作,这是一个非常有用的功能。您还可以在模式或Sequelize对象上设置
选项。下划线:true
。值得注意的是,所有自动生成的字段(外键等)都需要由它们的欠分名称引用-因此您的代码看起来像
{firstName:“Ryan”,parent_id:1}
是否应
下划线:true
下划线所有:true
选项在数据库请求时自动将camelCased模型的属性名称转换为下划线?我的意思是,在模型中我们定义为
activationKey:DataTypes.STRING
,但对db的请求将是
SELECT。。。“激活密钥”
?@f1nn不,目前不受支持。@MickHansen是否有任何计划支持此功能?@f1nn,
下划线
属性仅用于重命名自动创建的列,例如外键等。您知道这是否会将其双向转换?因此,当我从DB读取时,它会将JSON对象转换为camelCase。写回时我需要手动转换还是它也能处理转换?@James Parker它是由Sequelize自动完成的:)到
带下划线的
选项的参考URL现在是。
const User = sequelize.define('User', {
    username: DataTypes.STRING,
    password: DataTypes.STRING
  }, {underscored: true});