我正在使用MEAN堆栈构建一个网站,但用PostGRES替换MongoDB,结果使用Sequelize ORM。
我有两个模型 - User
和AudioConfig
。 User
和AudioConfig
可以AudioConfig
User
createdBy
updatedBy
属于models.User.hasMany(models.AudioConfig, {
foreignKey: {
name: 'createdBy',
allowNull: false
}
});
models.User.hasMany(models.AudioConfig, {
foreignKey: {
name: 'updatedBy'
}
});
models.AudioConfig.belongsTo(models.User, {
foreignKey: {
name: 'createdBy',
as: 'createdBy',
allowNull: false
}
});
models.AudioConfig.belongsTo(models.User, {
foreignKey: {
name: 'updatedBy',
as: 'updatedBy'
}
});
。
以下是我的关联使用Sequelize
的方式findAll
在我对AudioConfig
的{{1}}查询中,我尝试了一些与我在网上找到的不同的内容,但似乎没有一个像我期望的那样工作:
var Db = require('../../models');
var entityModel = Db.AudioConfig;
exports.index = function (req, res) {
entityModel.findAll({
include: {all:true}
})
.then(function (entities) {
return res.status(200).json(entities);
})
.catch(function (err) {
return handleError(res, err);
})
};
// And I've tried this...
exports.index = function (req, res) {
entityModel.findAll({
include: [
{model: Db.User, as: 'createdBy'},
{model: Db.User, as: 'updatedBy'}
]
})
.then(function (entities) {
return res.status(200).json(entities);
})
.catch(function (err) {
return handleError(res, err);
})
};
// And this too...
exports.index = function (req, res) {
entityModel.findAll({
include: [
{
model: Db.User
}
]
})
.then(function (entities) {
return res.status(200).json(entities);
})
.catch(function (err) {
return handleError(res, err);
})
};
现在,在我的数据库中,我有AudioConfig
的单个记录,其中包含两个User
引用 - 一个用于createdBy
,另一个用于updatedBy
。但是当我对AudioConfig
进行查询时,我只返回User
字段的updatedBy
条记录。
[
{
"id": "e3011e31-b907-47ad-99f3-61016283a523",
"sampleRate": 16000,
"format": "WAV",
"channel": 2,
"bitRate": 16,
"createdAt": "2016-05-01T16:30:11.847Z",
"updatedAt": "2016-05-01T16:30:11.847Z",
"createdBy": "1375263f-a3f0-4eef-800f-99b28fdce9d8",
"updatedBy": "5bb8cac0-b916-4000-81fe-9b1f8f597847",
"User": {
"id": "5bb8cac0-b916-4000-81fe-9b1f8f597847",
"email": "johnd@email.com",
"firstName": "John",
"lastName": "Doe",
"resetPasswordToken": null,
"resetPasswordTokenExpiresOn": null,
"createdAt": "2016-05-01T16:30:11.816Z",
"updatedAt": "2016-05-01T16:30:11.816Z",
"roleId": "10ae3879-9f9f-4370-aa47-3677c492afd8"
}
}
]
如何获取它以便将createdBy
UUID值替换为与其关联的User
对象?同样适用于updatedBy
字段?
答案 0 :(得分:5)
我终于意识到问题是什么,你在外键对象上设置了属性。这应该有希望解决它,不幸的是我现在无法自己测试它。
models.User.hasMany(models.AudioConfig, {
as: 'createdByUser',
foreignKey: {
name: 'createdBy',
allowNull: false
}
});
models.User.hasMany(models.AudioConfig, {
as: 'updatedByUser',
foreignKey: {
name: 'updatedBy'
}
});
models.AudioConfig.belongsTo(models.User, {
as: 'createdByUser',
foreignKey: {
name: 'createdBy',
allowNull: false
}
});
models.AudioConfig.belongsTo(models.User, {
as: 'updatedByUser'
foreignKey: {
name: 'updatedBy'
}
});