我正在使用MEAN堆栈构建一个网站,但用PostGRES替换MongoDB,结果使用Sequelize ORM.
我有两个型号 - User和AudioConfig.一个User可以有很多AudioConfig和AudioConfig属于一个User由createdBy和updatedBy.
以下是我的协会使用Sequelize的方式
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'
}
});
Run Code Online (Sandbox Code Playgroud)
在我的findAll查询中AudioConfig,我尝试了几种与我在网上找到的不同,但似乎没有像我期望的那样工作:
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);
})
};
Run Code Online (Sandbox Code Playgroud)
现在,在我的数据库中,我有一个记录,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"
}
}
]
Run Code Online (Sandbox Code Playgroud)
如何获取它以便createdByUUID的值被替换为User与之关联的对象?对于这个updatedBy领域一样吗?
我有点期待与MongoDB和Mongoose相同的行为populate
我终于意识到问题是什么,你在外键对象上设置了属性.这应该有希望解决它,不幸的是我现在无法自己测试它.
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'
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4066 次 |
| 最近记录: |