gpt4 book ai didi

sql - Sequelize : Create instance with existing association

转载 作者:行者123 更新时间:2023-11-29 14:30:57 25 4
gpt4 key购买 nike

试图让 sequelize 返回具有现有关联的新创建的对象。我的目标是创建一个与现有组织关联的新用户,并返回两者。

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。非常感谢有人为我指明正确的方向。

最佳答案

我认为还不支持:

options.include : an array of include options - Used to build prefetched/included model instances.

你可以同时使用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
});
});

关于sql - Sequelize : Create instance with existing association,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51952379/

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