我目前正在使用express和sequelize+mysql,想知道解决这个问题的最佳方法是什么。我很抱歉,如果这是一个基本的问题,因为我是相当新的续集,甚至一般sql数据库。
我有个模特 User
像这样;
export default db.define('User', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
name: {
type: Sequelize.STRING,
allowNull: false,
},
email: {
type: Sequelize.STRING,
allowNull: false,
},
createdAt: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW,
},
updatedAt: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW,
},
});
我还有另外一个模型 Shoe
像这样;
export default db.define('Shoe', {
id: {
type: Sequelize.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
name: {
type: Sequelize.STRING,
allowNull: false,
},
size: {
type: Sequelize.INTEGER,
allowNull: true,
},
quality: {
type: Sequelize.ENUM('Brand New', 'Used', 'Collector Item'),
allowNull: false,
},
createdAt: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW,
},
updatedAt: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW,
},
});
然后我定义了这两者之间的关联。
User.hasMany(Shoe);
Shoe.belongsTo(User);
然而,问题是,这是'创造'的鞋,这导致重复。我基本上想要一个名为“shoes”的表,其中包含鞋子,然后用户只需根据它所拥有的鞋子引用id。
不知道最好的方法是什么,特别是如果用户拥有多个鞋。在pseudo中,我想我想要一个类似于鞋id数组的东西,比如 shoes: [1, 2, 3, 4]
当被查询时,会以某种方式在shoes表中查找并插入到用户响应中。
很明显,我可以在原始sql中执行类似的操作,但是考虑到sequelize的强大功能,我认为一定有更好的方法来实现这一点。
希望有人能提供一些建议和帮助这方面!
1条答案
按热度按时间lnlaulya1#
我建议使用tablename选项。
如果要存储用户、鞋子以及每个用户拥有的鞋子的信息,则需要创建第三个表。这个n:m关联,因为每个用户可能有几个鞋,每个鞋可能属于几个用户。可以通过以下几种方式创建此表:
请参阅model.belongtomany教程和api文档
定义用户鞋模型,然后关联用户、鞋和用户鞋模型:
或者像这样:
我建议你读一本书sql反模式/karwin-bill。罗利和sequelize协会的文件。