我正在尝试查询一个模型及其子模型。子级引用父级时使用的是属于。我正在尝试findOne父级并将子级包含在结果中。
以下是我的用户模型:
const Sequelize = require('sequelize');
const connection = require('../middleware/sql-connection');
const User = connection.define('USR', {
'ID': { type: Sequelize.BIGINT, primaryKey: true },
'NM': { type: Sequelize.STRING, allowNull: false },
'EMAIL': { type: Sequelize.STRING, allowNull: false, validate: { isEmail: true } },
'PHONE': { type: Sequelize.STRING, allowNull: false },
'STS': { type: Sequelize.BOOLEAN, allowNull: false }
});
module.exports = User;
以下是我的User_TC模型:
const Sequelize = require('sequelize');
const connection = require('../middleware/sql-connection');
const User = require('./user');
const UserTC = connection.define('USR_TC', {
'USR_ID': { type: Sequelize.BIGINT, primaryKey: true },
'TC_ACPT': { type: Sequelize.BOOLEAN, allowNull: false }
});
UserTC.belongsTo(User, { as: 'User', foreignKey: 'USR_ID' });
module.exports = UserTC;
下面是我的findOne方法:
User.findOne({
include: [
{ model: UserTC, as: 'userTc' }
],
where: { ID: req.userData.id }
})
.then(user => {
return res.status(200).json(user);
})
.catch(err => {
console.log(err);
return res.status(500).json({
message: err
});
});
输出抛出了一个错误:SequelizeEagerLoadingError: USR_TC is not associated to USR!
请多多指教!
发布于 2019-05-08 13:58:13
你需要
User.hasMany(user_tc)||User.hasOne(User_tc)
使用to query usr_tc from User
发布于 2019-05-09 07:38:08
好了,我想出了如何实现这一点。以下是我所做的:
在我的用户模型中:
const Sequelize = require('sequelize');
const connection = require('../middleware/sql-connection');
const UserTC = require('./user-tc');
const User = connection.define('USR', {
'ID': { type: Sequelize.BIGINT, primaryKey: true },
'NM': { type: Sequelize.STRING, allowNull: false },
'EMAIL': { type: Sequelize.STRING, allowNull: false, validate: { isEmail: true } },
'PHONE': { type: Sequelize.STRING, allowNull: false },
'STS': { type: Sequelize.BOOLEAN, allowNull: false }
});
User.hasOne(UserTC, { as: 'userTc', foreignKey: 'USR_ID' });
module.exports = User;
在我的User_TC模型中:
const Sequelize = require('sequelize');
const connection = require('../middleware/sql-connection');
const UserTC = connection.define('USR_TC', {
'USR_ID': { type: Sequelize.BIGINT, primaryKey: true, references: 'USR', referencesKey: 'ID' },
'TC_ACPT': { type: Sequelize.BOOLEAN, allowNull: false }
});
module.exports = UserTC;
和下面的findOne方法:
User.findOne({
include: [
{ model: UserTC, as: 'userTc' }
],
where: { ID: req.userData.id }
})
.then(user => {
return res.status(200).json(user);
})
.catch(err => {
console.log(err);
return res.status(500).json({
message: err
});
});
像一个护身符一样工作:) :),下面是我的输出:
{
"ID": "1",
"NM": "Tenant-1",
"EMAIL": "tenant1@gmail.com",
"PHONE": "1234567890",
"STS": true,
"userTc": {
"USR_ID": "1",
"TC_ACCPT": false
}
}
https://stackoverflow.com/questions/56033455
复制相似问题