【发布时间】:2016-07-23 12:15:03
【问题描述】:
我正在尝试在 sequelize 中关联 3 个表。
我创建的模型如下。
用户模型
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 对象是关联的,但学校对象不是 userschools。如何创建 3 路关联来检索完整数据?
提前致谢。
【问题讨论】:
-
如果有更好的方法在 MySQL 中保存此类数据,请告诉我。合并 Schools 和 UserSchools 表不是一个选项,因为我需要维护一个具有唯一学校 ID 的表:)
标签: sequelize.js