2016-07-01 19 views
6

Kullanıcı Tablosu ve userAttributes tablosum var. Her kullanıcı her bir userAttribute örneğinden yalnızca birini alabilir, bu yüzden sütun adı ve userId için birleşik benzersiz bir dizin oluşturmak istiyorum (Bu, userAttributes.belongsTo tarafından oluşturulur.) Bu nasıl yapılabilir?İlişkili verilerle birleşik bir dizin oluşturulsun mu?

UserAttribute = sequelize.define('userAttributes', { 
    name: { 
     type:  Sequelize.STRING, 
     allowNull: false, 
     unique: 'nameIndex', 
     validate: { 
      isIn: [['phone', 'name','driverRequest']], 
     } 
    }, 
    value: { 
     type:  Sequelize.STRING, 
     allowNull: false 
    }, 
}); 


User.hasMany(userAttributes, {unique: 'nameIndex'}); 
userAttributes.belongsTo(User, {unique: 'nameIndex'}); 

hiçbir başarı ile benzersiz nameIndex ekleyerek tride, sadece isim-kolona uygulamak gibi görünüyor.

+0

Ben bu işe o –

+0

el veri modelindeki useId eklemek yaptıklarını mı yapmazsa bana bildirin gerektiğini düşünüyorum bileşik endeks kullanmak için aşağıdaki örnek modifiye ettik? Değer özniteliğini özlüyorum. – Himmators

+0

Bazı şeyleri gerçekten anlayamıyorum. Yazdınız: "Her kullanıcı her bir userAttribute uygulamasının yalnızca bir örneğini alabilir, bu yüzden sütun adı ve userId için birleşik benzersiz bir dizin oluşturmak istiyorum". Bu 2 dizinin (userId ve name) userAttribute'a kaydedildiğine inanıyorum, yanılıyorsam düzeltin. Sağladığınız aşağıdaki kodda yeni alanın değerini görebiliyorum, bunun ne anlama geldiğinden emin değilim, bu konuda daha fazla bilgi verebilir misiniz? ya da sorun bağlamını nerede özlediğimi açıklıyor musunuz? –

cevap

3
var Sequelize = require('sequelize'); 
var sequelize = new Sequelize('<yourDatabaseName>', '<yourUserName>', '<yourPassword', { 
    host: '<ip>' 
}); 

var User = sequelize.define('user', { 
    id: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    primaryKey: true 
    }, 
}); 
var UserAttribute = sequelize.define('userattribute', { 
    userId: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    unique: 'compositeIndex', 
    references: { 
     model: User, 
     key: "id" 
    } 
    }, 
    name: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    unique: 'compositeIndex' 
    } 
}); 

User.hasOne(UserAttribute, { 
    as: "UserAttribute" 
}) 

UserAttribute.belongsTo(User, { 
    foreignKey: "userId", 
    as: 'UserId' 
}) 


sequelize.sync({ 
    // use force to delete tables before generating them 
    force: true 
}).then(function() { 
    console.log('tables have been created'); 
    return User.create({ 
    id: 'randomId1' 
    }); 
}) 
    .then(function() { 
    console.log('tables have been created'); 
    return User.create({ 
     id: 'randomId2' 
    }); 
    }) 
    .then(function() { 
    return UserAttribute.create({ 
     userId: 'randomId1', 
     name: 'name1' 
    }); 
    }) 
    .then(function() { 
    return UserAttribute.create({ 
     userId: 'randomId2', 
     name: 'name1' 
    }); 
    }) 
    // // generates Validation Error 
    // .then(function() { 
    // return UserAttribute.create({ 
    //  userId: 'randomId1', 
    //  name: 'name1' 
    // }); 
    // })