Подтвердить что ты не робот

Sequelize использовать случай верблюда в JS, но подчеркивает имена таблиц

Возможно ли, чтобы имена столбцов были подчеркнуты (postgres), но у вас есть JavaScript-получатели camelCase на языковые стандарты?

4b9b3361

Ответ 1

Непосредственно в определении столбца, но вы можете взглянуть на методы получения и установки:

http://sequelizejs.com/documentation#models-getters---setters-defining-as-part-of-the-model-options

Хотя этот параметр требует, чтобы вы определяли метод получения и установки для каждого столбца вручную, его нельзя автоматизировать. Кроме того, и ваши получатели, и фактические имена столбцов будут доступны для объекта.

Я думаю, что есть проблема для этой функциональности на GitHub, но я не могу найти ее прямо сейчас


фактическая ссылкаhttps://sequelize.org/master/manual/models-definition.html#getters--amp--setters

Ответ 2

Для тех, кто позже найдет это, теперь можно явно определить, как должно быть названо поле базы данных:

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

Ответ 3

2019+

В Sequelize v5 теперь вы можете использовать атрибут underscored: true


const User = sequelize.define('User', {
    username: DataTypes.STRING,
    password: DataTypes.STRING
  }, {underscored: true});

http://docs.sequelizejs.com/manual/models-definition.html

Ответ 4

Вы можете добиться этого как для моделей (таблиц), так и для ключей (полей), используя более новую версию 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;