2016-04-04 28 views
6

ile ilişkilendirme 3 tabloyu sırayla ilişkilendirmeye çalışıyorum.3 tabloları SEQUELIZE

Oluşturduğum modeller aşağıdaki gibidir.

enter image description here

Kullanıcılar modeli

var Sequelize = require('sequelize'); 

module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define('User', { 
    uuid: { 
     type: Sequelize.STRING, 
     primaryKey: true 
    }, 
    first_name: { 
     type: Sequelize.STRING, 
     allowNull: false 
    }, 
    last_name: { 
     type: Sequelize.STRING, 
     allowNull: false 
    }, 
    birth_date: { 
     type: Sequelize.DATE, 
     allowNull: false 
    }, 
    gender: { 
     type: Sequelize.STRING, 
     allowNull: true 
    }, 
    email_id: { 
     type: Sequelize.STRING, 
     allowNull: false, 
     validate: { 
     isEmail: true 
     } 
    }, 
    contact_number: { 
     type: Sequelize.STRING, 
     allowNull: false, 
     validate: { 
     isNumeric: true 
     } 
    } 
    }, { 
    classMethods: { 
     associate: function(models) { 
     User.hasMany(models.UserSchool) 
     } 
    } 
    }); 

    return User; 
}; 

Okullar modeli

var Sequelize = require('sequelize'); 

module.exports = function(sequelize, DataTypes) { 
    var School = sequelize.define('School', { 
    school_id: { 
     type: Sequelize.STRING, 
     primaryKey: true 
    }, 
    name: { 
     type: Sequelize.STRING, 
     allowNull: false 
    }, 
    address: { 
     type: Sequelize.TEXT, 
     allowNull: false 
    }, 
    city: { 
     type: Sequelize.STRING, 
     allowNull: false 
    } 
    }, { 
    classMethods: { 
     associate: function(models) { 
     School.hasMany(models.UserSchool) 
     } 
    } 
    }); 

    return School; 
}; 

UserSchools modeli

var Sequelize = require('sequelize'); 

module.exports = function(sequelize, DataTypes) { 
    var UserSchool = sequelize.define('UserSchool', { 
    year_of_joining: { 
     type: Sequelize.DATE, 
     allowNull: true 
    }, 
    year_of_passing: { 
     type: Sequelize.DATE, 
     allowNull: true 
    }, 
    school_type: { 
     type: Sequelize.STRING, 
     allowNull: false 
    }, 
    course: { 
     type: Sequelize.STRING, 
     allowNull: true 
    } 
    }, { 
    classMethods: { 
     associate: function(models) { 
     UserSchool.belongsTo(models.User, { 
      onDelete: "CASCADE", 
      foreignKey: { 
      allowNull: true 
      } 
     }), 
     UserSchool.belongsTo(models.School, { 
      onDelete: "CASCADE", 
      foreignKey: { 
      allowNull: true 
      } 
     }); 
     } 
    } 
    }); 

    return UserSchool; 
}; 

Ben kullanıcılar almak zaman userschools olduğunu nesne ilişkili ancak okul nesnesi userschools için değil. Tüm verileri almak için 3 yollu bir ilişki nasıl oluşturabilirim?

Şimdiden teşekkürler.

+0

Bu tür verileri MySQL'e kaydetmenin daha iyi bir yolu olup olmadığını bana bildirin. Birleştirme Okulları ve UserSchools tablosu, okul kimliğiyle benzersiz bir tabloya ihtiyacım olduğu için bir seçenek değil :) –

cevap

3

Bunu da deneyebilir misiniz?

user.js

classMethods: { 
    associate: function(models) { 
    // associations can be defined here 
    User.belongsToMany(models.School, { 
     through: { 
      model: models.UserSchool 
     }, 
     foreignKey: 'uuid' 
    }); 
    } 
} 

school.js

classMethods: { 
    associate: function(models) { 
    //associations can be defined here 
    School.belongsToMany(models.User, { 
     through: { 
      model: models.UserSchool 
     }, 
     foreignKey: 'school_id' 
    }); 
    } 
} 

UserSchool hiçbir ilişki

.

+0

Bir çekicilik gibi çalıştım. Çok teşekkürler :) Sequelize belgeleriyle ilgili söyledikleri doğrudur (Kendisi o kadar harika değil ama kendi başına harikadır) :) –

+0

Hey, 4 tabloyu ilişkilendirmeme yardım edebilir misiniz? http://stackoverflow.com/questions/41671377/sequelize-associating-4-tables –

3
User.belongsToMany(models.School, { 
    through: { 
     model: models.UserSchool 
    }, 
    foreignKey: 'uuid' 
}); 

School.belongsToMany(models.User, { 
    through: { 
     model: models.UserSchool 
    }, 
    foreignKey: 'school_id' 
}); 

Bu, sorununuzu çözmelidir.

+0

4 tabloyu ilişkilendirmeme yardımcı olabilir misiniz? Çok yararlı olurdu http://stackoverflow.com/questions/41671377/sequelize-associating-4-tables Teşekkürler –