序列化belongstomany禁用相同的ID

时间:2019-01-02 16:52:00

标签: mysql sequelize.js

曾经在文档中挖掘了一段时间,找不到此选项。

场景:

User.belongsToMany(User, {
  as: 'following',
  through: 'follows',
  foreignKey: 'follower_id',
  otherKey: 'followed_id',
  // disableSameId: true <--- the kind of option I'm looking for
});

在此场景中,我正在寻找的行为是禁止用户跟随自己。

当前,我的实现很明显,在发出请求之前检查了id1 !== id2,但仍然想知道这种可能的根快捷方式

有人知道吗?

1 个答案:

答案 0 :(得分:0)

找到了令我满意的解决方案:

搜索使我here带领我为此rel-table创建了一个模型

使用自定义validator可以达到目的。

return sequelize.define('Follows',
{},
{
  timestamps: true,
  paranoid: false,
  underscored: true,
  freezeTableName: true,
  tableName: 'follows',
  validate: {
    IdsShouldNotMatch() {
      compare(this, 'Cannot follow yourself');
    }
  }
});


// model_helpers/compare.js
module.exports = (that, error) => {
  let condition = Object.values(that.dataValues)
    .map(v => Number(v))
    .reduce((a, b) => a - b);
  if (!condition) {
    throw new Error(error);
  }
};