2016-04-04 2 views
6

Я пытаюсь связать 3 таблицы в sequelize.Связать 3 таблицы в SEQUELIZE

Модели, которые я создал, следующие.

enter image description here

Пользователей модель

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

школа модель

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 модель

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

Когда я получить пользователь в userschools объект является но школьный объект не относится к школам пользователей. Как создать трехстороннюю связь для получения полных данных?

Заранее спасибо.

+0

Сообщите мне, если есть лучший способ сохранить этот вид данных в MySQL. Слияние школ и таблицы UserSchools не является вариантом, так как мне нужно поддерживать таблицу с уникальными идентификаторами школы :) –

ответ

3

Можете ли вы попробовать это, также?

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.

+0

Работал как шарм. Большое спасибо :) Его правда, что они говорят о документации Sequelize (это не так здорово, но Sequelize само по себе является удивительным) :) –

+0

Эй, вы можете помочь мне связать 4 таблицы? 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' 
}); 

Это должно решить вашу проблему.

+0

Можете ли вы помочь мне связать 4 таблицы? Было бы очень полезно http://stackoverflow.com/questions/41671377/sequelize-associating-4-tables Спасибо –