【问题标题】:How to add a case-insensitive unique constraint in a SequelizeJS Model when using Postgresql?使用 Postgresql 时如何在 SequelizeJS 模型中添加不区分大小写的唯一约束?
【发布时间】:2019-01-21 12:17:28
【问题描述】:
var Model = sequelize.define('Company', {
  name: {
    type: DataTypes.STRING,
    unique: true
  }
}

在上面的例子中,unique: true 区分大小写。它允许将“sample”和“Sample”都保存在数据库中。 sequelize 中是否有内置方法可以做到这一点,而无需编写自定义验证器?

【问题讨论】:

    标签: node.js postgresql sequelize.js


    【解决方案1】:

    我建议添加一个功能唯一索引,如下所示:http://www.postgresql.org/message-id/c57a8ecec259afdc4f4caafc5d0e92eb@mitre.org

    var Model = sequelize.define('Company', {
      name: {
        type: DataTypes.STRING
      }
    }, 
    {
      indexes: [
        { 
          unique: true,   
          name: 'unique_name',  
          fields: [sequelize.fn('lower', sequelize.col('name'))]   
        }
      ]
    });
    

    【讨论】:

    • 谢谢!如果违反了,sequelize 会像其他 sequelize 验证器一样抛出 Sequelize.ValidationError 吗?
    • @JohnKevinM.Basco 验证发生在数据发送到数据库之前,所以我不希望这样。相反,save() 函数(或 update() 等)将失败。
    • @curiousdannii 啊。这是有道理的,因为这个唯一索引将在数据库级别完成。所以我想如果我添加这个唯一索引,我仍然需要编写一个自定义的不区分大小写的唯一验证器。谢谢!
    • 糟糕,我忘记了最重要的部分——索引实际上应该是唯一的。发布更新
    • 我无法编辑单个字符,但字段定义中缺少大括号。 [sequelize.fn('lower', sequelize.col('name'))]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2013-05-30
    • 2013-05-11
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多