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