2016-04-04 15 views
6

Sto tentando di associare 3 tabelle in sequenza.Associazione di 3 tabelle in SEQUELIZE

I modelli che ho creato sono i seguenti.

enter image description here

Utenti modello

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; 
}; 

scuole modello

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 modello

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; 
}; 

Quando ho recuperare gli utenti le userschools oggetto viene associato ma l'oggetto scolastico non è su userschools. Come posso creare un'associazione a 3 vie per recuperare i dati completi?

Grazie in anticipo.

+0

Fammi sapere se esiste un modo migliore per salvare questo tipo di dati in MySQL. Fusione di scuole e tabella UserSchools non è un'opzione in quanto ho bisogno di mantenere una tabella con ID scuola unico :) –

risposta

3

Puoi provare anche questo?

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' 
    }); 
    } 
} 

Nessuna associazione a UserSchool.

+0

Ha funzionato come un fascino. Grazie mille :) È vero quello che dicono riguardo la documentazione di Sequelize (non è grandioso ma Sequelize di per sé è fantastico) :) –

+0

Ehi, puoi aiutarmi ad associare 4 tavoli? 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' 
}); 

Questo dovrebbe risolvere il tuo problema.

+0

Puoi aiutarmi associando 4 tabelle? Sarebbe molto utile http://stackoverflow.com/questions/41671377/sequelize-associating-4-tables Grazie –

Problemi correlati