web-dev-qa-db-fra.com

Sequelize utilise la casse des chameaux dans JS mais les traits de soulignement dans les noms de table

Est-il possible de souligner les noms de colonne (postgres), mais les getters JavaScript doivent-ils être camelCase selon les normes linguistiques?

26
futbolpal

Pas directement dans la définition de votre colonne, mais vous pouvez jeter un coup d'œil aux accesseurs:

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

Bien que cette option nécessite la définition manuelle d'un getter et d'un setter pour chaque colonne, elle ne peut pas être automatisée. De plus, vos getters et les noms de colonnes réels seront alors disponibles sur l'objet.

Je pense qu'il y a un problème pour cette fonctionnalité sur github, mais je ne le trouve pas pour le moment.


lien actuel http://sequelizejs.com/docs/latest/models#getters---setters

2
Jan Aagaard Meier

Pour ceux qui trouveront cela plus tard, il est maintenant possible de définir explicitement le nom du champ de la base de données:

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

Vous pouvez y parvenir à la fois pour les modèles (tables) et les clés (champs) à l'aide d'une version plus récente de Sequelize.

J'utilise 4.29.2 et mes modèles ressemblent à ceci:

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',
  });

Comme vous pouvez le constater, je règle les valeurs nomTable pour les modèles (tables) et champ pour les clés (champs).

Quand je cours:

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

Le résultat est:

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;
0
Constantin Predescu