gpt4 book ai didi

node.js - 如何使用sequelize为属于多个关联的对象构建模型

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:47 25 4
gpt4 key购买 nike

这是我在 Country.js 中编写的内容(除了数据类型之外与 User.js 完全相同):

module.exports = function(sequelize, DataTypes) {
const Country = sequelize.define('country',
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
code: {
type: DataTypes.INTEGER
},
alpha2: {
type: DataTypes.STRING
},
alpha3: {
type: DataTypes.STRING
},
name_en: {
type: DataTypes.STRING
},
name_fr: {
type: DataTypes.STRING
}
},
{
freezeTableName: true,
timestamps: false
});

Country.associate = ( models ) => {
models.Country.belongsToMany(models.User, {
through: 'country_user',
as: 'user',
foreignKey: 'id_country'
});
};

return Country;
}

这是我的查询:

router.get('/thisuserCountries', function(req, res, next){
User(db, Sequelize.DataTypes).findOne({
include: [{
model: Country(db, Sequelize.DataTypes),
as: 'countries',
required: false,
attributes: ['id'],
}],
where: {
email: 'jerome.charlat@gmail.com'
}
})
.then(user => {
if(user) {
res.json(user)
}
else {
res.send('User does not exist')
}
})
.catch(err => {
res.send('error: ' + err)
})
})

这是我的 db.js :

const Sequelize = require('sequelize')
const db = new Sequelize('travel_memories', 'root', '', {
host: 'localhost',
dialect: 'mysql',
port: 3306
})

db
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});

const models = {
Country: db.import('../models/Country'),
User: db.import('../models/User'),
CountryUserJoin: db.import('../models/Country_user')
};

Object.keys(models).forEach((modelName) => {
if('associate' in models[modelName]){
models[modelName].associate(models);
}
});

module.exports = db

postman 说:错误 SequelizeEagerLoadingError:国家/地区未与用户关联!

但是,我认为当我关联每个模型中的表时,我应该在 through 参数中写入模型 User_country 。所以我尝试写一些类似的东西:

Country.associate = ( models ) => {
models.Country.belongsToMany(models.User, {
through: models.Country_user,
as: 'user',
foreignKey: 'id_country'
});
};

控制台说当我启动服务器时,在查询任何内容之前:

SequelizeAssociationError:country.belongsToMany(user)需要通过选项,传递字符串或模型。

所以我被屏蔽了。我使用文档中的示例来编写与 models.foo 的关联。但事实上模型是从无到有的..

再次感谢您的帮助!

最佳答案

关于此的文档并不多,但是here它表示在查询或选择属于多个属性时应该使用 through 选项,如下所示:

...
User(db, Sequelize.DataTypes).findOne({
include: [{
model: Country(db, Sequelize.DataTypes),
as: 'countries',
required: false,
through: {
attributes: ['id']
}
}],
where: {
email: 'jerome.charlat@gmail.com'
}
})
...

关于node.js - 如何使用sequelize为属于多个关联的对象构建模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56930091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com