续集:属性“播放列表”和关联“播放列表”之间的命名冲突?

And*_*e M 8 javascript mariadb node.js sequelize.js

我正在使用node.js,Sequelize和MariaDB,并且遇到以下错误,我不确定该如何解决?

错误:在模型playlist_entry上的属性“播放列表”和关联“播放列表”之间命名冲突。要解决此问题,请更改foreignKey或更改为关联定义中的值

我的Javascript:

Entities = function (settings, context) {

    sequelize = context.sequelize;

    var entities = {

        Playlist: this.sequelize.define('playlist', {
            name: Sequelize.STRING,
            description: Sequelize.STRING
        }),     

        PlaylistEntry: this.sequelize.define('playlist_entry', {
            playlist: Sequelize.INTEGER
            //track: Sequelize.INTEGER
        })

    };  

     entities.PlaylistEntry.belongsTo(
         entities.Playlist,
         { foreignKey: { name: 'fk_playlist' }});

    return entities;                    
}
Run Code Online (Sandbox Code Playgroud)

我的桌子:

CREATE TABLE `playlist` (
  `id` int(11) unsigned NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  `createdAt` timestamp NULL DEFAULT NULL,
  `updatedAt` timestamp NULL DEFAULT NULL,
  `external_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `playlist_entry` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `playlist` int(11) unsigned DEFAULT NULL,
  `track` int(11) unsigned DEFAULT NULL,
  `createdAt` timestamp NULL DEFAULT NULL,
  `updatedat` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `track_idx` (`track`),
  KEY `playlist_idx` (`playlist`),
  CONSTRAINT `fk_playlist` FOREIGN KEY (`playlist`) REFERENCES `playlist` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

Nee*_*hod 6

I faced exactly this problem while play with Sequelize, It's happened because the column name and reference name are same

Wrong Implementation


module.exports = (sequelize, DataTypes) => {
  const session = sequelize.define('session', {
    menteeId: DataTypes.INTEGER,
  }, {});

  session.associate = (models) => {
    session.belongsTo(models.user, {
      foreignKey: 'menteeId',
      as: 'menteeId',
      onDelete: 'CASCADE',
    });
  };
  return session;
};

Run Code Online (Sandbox Code Playgroud)

Here the column name (menteeId) and alias name (menteeId) are the same, To resolve this you just need to change alias name

Correct Implementation


module.exports = (sequelize, DataTypes) => {
  const session = sequelize.define('session', {
    menteeId: DataTypes.INTEGER,
  }, {});

  session.associate = (models) => {
    session.belongsTo(models.user, {
      foreignKey: 'menteeId',
      as: 'MenteeId', // Changes applied here
      onDelete: 'CASCADE',
    });
  };
  return session;
};

Run Code Online (Sandbox Code Playgroud)

In your case, you can do this

entities.PlaylistEntry.belongsTo(
    entities.Playlist,
    { 
    foreignKey: { name: 'fk_playlist' },
    as: 'PlayListAlias', // Appropriate name
    },
);
Run Code Online (Sandbox Code Playgroud)