gpt4 book ai didi

node.js - 在 Node 中设置 Sequelize 关联 - Postman 抛出约束错误

转载 作者:行者123 更新时间:2023-12-03 22:24:26 24 4
gpt4 key购买 nike

我正在尝试正确设置我的 Sequelize 关联,以便在我提出请求时提取所有“包含”数据。我已经在文档中看到了与此相关的信息,但是如果没有在应用程序中看到它,有点难以理解。
我以前有过关联,但是他们从来没有提取过外键值,而且我在 API 中只有“包含所有”。我现在有更具体的“包括:[“articleType”] 在我的数据拉取开始时。因为我在没有迁移的情况下工作,所以我不确定我是否正确更新了 pgAdmin(我只为那些我添加了外键由于唯一约束错误,不允许从主键中生成外键)。
理想情况下,我只想让我的后端 API 以最有效的方式提取外键值,因为我无法弄清楚我哪里出错了。我没有迁移,因为这只是一个项目,所以如果 Pgadmin 中的信息没有被复制,这可能是一个原因。
首先,PGadmin 中的 我应该如何反射(reflect)模型中的约束?这些可以手动完成吗?我看不到 manyToMany、belongTo 等,只有简单的外键限制到另一个表上的主键。
其次 ,在我下面的模型上,我是否需要在两个相关模型上声明键?在 PGadmin 中,我无法在主键上声明外键,而它可以从另一个表到主键正常工作。
有没有办法手动添加 SQL 连接,即使使用 Sequelize,以便在 JSON 中包含正确的外键值?我以前有使用 PHP/PHPmyAdmin 的经验,使用它要容易得多。从我可以看到我的文章模型在 Pgadmin 和我的后端文件中都引用了 articleType 模型,我也在我的 Controller API 中引用了它们(这似乎导致了错误,因为其他 API 在没有“包含”的情况下正常工作"方法中的一部分)。
enter image description here
enter image description here
物品模型

    const article = sequelize.define("articles", {

articleID: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false
},
articleTitle: {
type: Sequelize.TEXT
},
articleContent: {
type: Sequelize.TEXT
},
photos: {
type: Sequelize.TEXT
},
userID: {
type: Sequelize.INTEGER
},
articleTypeID: {
type: Sequelize.INTEGER
}},
{
timestamps: false
}, {});
article.associate = function(models) {
article.hasMany(models.articleType, {
foreignKey: "articleTypeID",
as: "articleType_FK"});
article.hasMany(models.userLogin, {
foreignKey: "userID",
as: "userLogin_FK"});
}
return article;
文章类型模型
    const articleType = sequelize.define("articleTypes", {

articleTypeID: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
articleType: {
type: Sequelize.TEXT
}},
{
timestamps: false
},{});
articleType.associate = function(models) {
articleType.belongsTo(models.article, {
foreignKey: "articleTypeID",
as: "article",
});
}
return articleType;
}
物品 Controller
exports.articleList = (req, res) => {
// article.findByPk(articleID, { include: ["articleType"] });
article.findAll({
**include: [{ model: articleType, as: 'fki_articleType_FK'},
{ model: userLogin, as: 'fki_userID_FK'}]
})**
.then((article) => {
const articleList = [];
更新
我之前在我的 index.js 文件中的模型文件夹中创建了许多关联,但是我现在在实际模型中只有这些。这些需要同时放入吗?
enter image description here

最佳答案

我可能认为问题在于您提供给 seuqelize 的模型名称,然后在 Association 中使用。

 const article = sequelize.define("articles", {...
这会产生一个名为 - articles 的模型,可通过 models.articles 访问您的关联。
问题出现在这里:
articleType.associate = function (models) {
articleType.belongsTo(models.article, { // models.article will be undefined
foreignKey: "articleTypeID",
as: "article",
});

// This below should rather work
articleType.associate = function (models) {
articleType.belongsTo(models.articles, { // models.articles exist as you told Sequelize to name it with that extra 's'
foreignKey: "articleTypeID",
as: "article",
});
}
}
但最好在没有 s 的情况下提及模型的名称,以免造成问题和混淆
那么什么会起作用?:
// ------------------------------------------------------------------
// models/article.js
const article = sequelize.define("article", {
//attributes
}, {
// options
});
article.associate = function (models) {
article.hasMany(models.articleType, {
foreignKey: "articleTypeID",
as: "articleType_FK"
});
// other associations
}
return article;

// ------------------------------------------------------------------
// models/articleType.js
const articleType = sequelize.define("articleType", {
// attributes
}, {
// options
});
articleType.associate = function (models) {
articleType.belongsTo(models.article, {
foreignKey: "articleTypeID",
as: "article",
});
}
return articleType;

// ------------------------------------------------------------------
// controller
exports.articleList = (req, res) => {
// article.findByPk(articleID, { include: ["articleType"] });
article
.findAll({
include: [{
model: articleType, as: 'articleType_FK',
}, {
model: userLogin, as: 'userID_FK',
}],
})
.then((articles) => {
console.log('articles', articles);
})
}

关于node.js - 在 Node 中设置 Sequelize 关联 - Postman 抛出约束错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66996162/

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