Вам не нужно определять GroupApplication
, оно будет выведено, как и foreignKey
.Соотношение должно быть между Group
и Application
(единственное число лучше, думайте о нем как об объектной модели, где у вас есть Instance
из Application
Model
), но происходит through
соединение group_application
Таблица.После этого вы можете include
каждый из Models
включить в запрос другого.
Обратите внимание, что я не проверял этот код.
group.js
module.exports = function (sequelize, DataTypes) {
var Group = sequelize.define('Group',
{
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
},
{
tableName: 'group',
timestamps: false,
underscored: true,
}
);
Group.associate = function(models) {
Group.belongsToMany(models.Application, {
as: 'applications', // <-- alias here
through: 'group_application',
});
};
return Group;
};
application.js
module.exports = function (sequelize, DataTypes) {
var Application = sequelize.define('Application',
{
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
},
{
tableName: 'application',
timestamps: false,
underscored: true,
}
);
Application.associate = function(models) {
Application.belongsToMany(models.Group, {
as: 'groups', // <-- alias here
through: 'group_application',
});
};
return Application;
};
example.js
// return all Groups and their Applications
const groupsToApplications = await Group.findAll({
include: [
{
model: Application,
as: 'applications',
through: 'group_application',
},
],
});
// return all Applications and their Groups
const applicationsToGroups = await Application.findAll({
include: [
{
model: Group,
as: 'groups',
through: 'group_application',
},
],
});