Sequelize utilise le cas de chameau dans JS mais souligne dans les noms de table

est-il possible d'avoir des noms de colonne soulignés (postgres) mais les getters JavaScript doivent-ils être camelCase selon les normes linguistiques?

25
demandé sur futbolpal 2013-09-17 23:29:47

3 réponses

Pas directement dans votre définition de la colonne, mais vous pouvez prendre un coup d'oeil à getters et setters:

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

bien que cette option exige que vous définissiez un getter et un setter pour chaque colonne manuellement, il ne peut pas être automatisé. De plus, vos getters et les noms de colonnes actuels seront alors disponibles sur l'objet.

je pense qu'il est un problème pour cette fonctionnalité sur github, mais je ne peux pas le trouver maintenant


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

2
répondu Jan Aagaard Meier 2014-03-05 18:51:48

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'
  }
});
30
répondu Mick Hansen 2015-01-21 11:40:53

vous pouvez réaliser ceci à la fois pour les modèles (tables) et les clés (champs) en utilisant une nouvelle version 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 voir, je suis la nom de la table valeur pour les modèles (tableaux) et champ valeurs pour les clés (les champs).

Lorsque j'exécute:

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
répondu Constantin Predescu 2018-02-27 01:26:54