尝试获得续集以返回具有现有关联的新创建对象。我的目标是创建一个与现有组织有关联的新用户,并同时返回两者。
在中 user.model.js:
export default (sequelize, DataTypes) => {
const User = sequelize.define('user', {
email: {
type: DataTypes.STRING,
unique: true,
},
});
User.associate = (models) => {
User.belongsTo(models.Organisation, {
foreignKey: {
name: 'organisationId',
field: 'organisation_id',
},
});
};
return User;
};
在中 organisation.model.js:
export default (sequelize, DataTypes) => {
const Organisation = sequelize.define('organisation', {
name: {
type: DataTypes.STRING,
unique: true,
},
});
return Organisation;
};
成功:获取现有用户
我可以使用include
选项进行查询来检索现有用户及其组织。
const user = models.User.findOne({
where: {
email: 'existing@user.com',
},
include: [
{ model: models.Organisation, attributes: ['name'] },
],
});
失败:创建新用户
已插入实例,但查询无法返回组织属性。
const user = models.User.create({
email: 'new@user.com',
organisationId: 'existing-organisation-id'
}, {
include: [
{ model: models.Organisation, attributes: ['name'] },
],
});
成功:创建一个新用户并对其进行查询
插入实例,然后使用与组织数据一起检索的另一个查询。问题在于它需要两个查询到数据库。只需一个,
models.User.create({
email: 'new@user.com',
organisationId: 'existing-organisation-id'
}).then(() => {
models.User.findOne({
where: {
email: 'new@user.com',
},
include: [
{ model: models.Organisation, attributes: ['name'] },
],
});
});
我已经仔细阅读了文档,但我想我一定错过了一些东西。我要连接的数据库是 PostgreSQL 。非常感谢有人为我指出正确的方向。
答案 0 :(得分:2)
我认为尚不支持:
options.include:包含选项的数组-用于构建 预提取/包含的模型实例。
您可以使用include来同时创建关联的数据,但您不能只是这样获取数据
但是更简单的方法是:
models.User.create({
email: 'new@user.com',
organisationId: 'existing-organisation-id'
}).then((user) => {
user.getOrganisation().then(org => {
console.log(user,org); // <------ Check the console
});
});