2017-02-13 29 views
5

Jak zdefiniować unikalny indeks dla kombinacji kolumn w sequelu. Na przykład chcę dodać unikalny indeks na user_id, count i name.Jak zdefiniować unikatowy indeks na wielu kolumnach w sequelu?

var Tag = sequelize.define('Tag', { 
     id: { 
      type: DataTypes.INTEGER(11), 
      allowNull: false, 
      primaryKey: true, 
      autoIncrement: true 
     }, 
     user_id: { 
      type: DataTypes.INTEGER(11), 
      allowNull: false, 
     }, 
     count: { 
      type: DataTypes.INTEGER(11), 
      allowNull: true 
     }, 
     name: { 
      type: DataTypes.STRING, 
      allowNull: true, 
     }) 

Odpowiedz

11

Można odwołać się do tego dokumentu http://docs.sequelizejs.com/en/latest/docs/models-definition/#indexes

trzeba będzie zmienić defination jak pokazano poniżej i nazywają Synchronizuj

var Tag = sequelize.define('Tag', { 
    id: { 
     type: DataTypes.INTEGER(11), 
     allowNull: false, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    user_id: { 
     type: DataTypes.INTEGER(11), 
     allowNull: false, 
    }, 
    count: { 
     type: DataTypes.INTEGER(11), 
     allowNull: true 
    }, 
    name: { 
     type: DataTypes.STRING, 
     allowNull: true, 
    } 
}, 
{ 
    indexes: [ 
     { 
      unique: true, 
      fields: ['user_id', 'count', 'name'] 
     } 
    ] 
}) 
+0

got it, dzięki! – lboyel

1

Jeśli akceptowane jeden nie działa spróbuj poniższy kod . W moim przypadku zadziałało to raczej na zaakceptowane.

var Tag = sequelize.define('Tag', { 
     id: { 
      type: DataTypes.INTEGER(11), 
      allowNull: false, 
      primaryKey: true, 
      autoIncrement: true 
     }, 
     user_id: { 
      type: DataTypes.INTEGER(11), 
      allowNull: false, 
      unique: 'uniqueTag', 
     }, 
     count: { 
      type: DataTypes.INTEGER(11), 
      allowNull: true, 
      unique: 'uniqueTag', 
     }, 
     name: { 
      type: DataTypes.STRING, 
      allowNull: true, 
      unique: 'uniqueTag', 
     }) 
1

mam ten sam problem stosowanej kompozytowego unikalność do wielu kolumny ale praca nic z MySQL, Sequelize (4.10.2) i NodeJs 8.9.4 końcu naprawiłem poprzez następujący kod.

queryInterface.createTable('actions', { 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    system_id: { 
     type: Sequelize.STRING, 
     unique: 'actions_unique', 
    }, 
    rule_id: { 
     type: Sequelize.STRING, 
     unique: 'actions_unique', 
    }, 
    plan_id: { 
     type: Sequelize.INTEGER, 
     unique: 'actions_unique', 
    } 
}, { 
    uniqueKeys: { 
     actions_unique: { 
      fields: ['system_id', 'rule_id', 'plan_id'] 
     } 
    } 
});