gpt4 book ai didi

javascript - 我无法将数据插入到 Sequelize 中的表中(特别是外键)

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

所以我在我的 JavaScript 应用程序上为我的 PostgreSQL 数据库使用 Sequelize。我有 4 个模型(Users、Posts、Likes 和 FollowingsFollowers)。我的用户模型工作正常,它没有任何外键,所以我能够毫无问题地创建和查找数据。但是,我的 Posts 模型有 2 个外键(user_id 和 parent_id)。 user_id 引用 Users 表中的主键 (id),而 parent_id 引用其自身(Posts 表)中的主键 (id)。当我尝试将数据插入 Posts 表时,我能够在常规字段中插入数据,但外键会被忽略。

这是我的数据库连接:

const Sequelize = require('sequelize');
const API = require('../../client/public/config.js');
const db = new Sequelize(API.elephantSqlUrl);

db.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch((err) => {
console.error('Unable to connect to the database:', err);
});

module.exports = db;

这是我的用户模型:

const Sequelize = require('sequelize');
const db = require('../db.js');

const Users = db.define('users', {
username: {
type: Sequelize.STRING,
unique: true
},
bio: Sequelize.STRING,
profile_picture: Sequelize.STRING
});

module.exports = Users;

这是我的 Posts 模型:

const Sequelize = require('sequelize');
const db = require('../db.js');

const Posts = db.define('posts', {
type: Sequelize.INTEGER,
body: Sequelize.STRING,
likesCount: {
type: Sequelize.INTEGER,
defaultValue: 0
}
});

module.exports = Posts;

这里是我定义外键和同步我的数据库的地方:

const db = require('./db.js');
const Users = require('./models/users.js');
const Posts = require('./models/posts.js');
const Likes = require('./models/likes.js');
const FollowingsFollowers = require('./models/followingsFollowers.js');

Posts.belongsTo(Users, { foreignKey: 'user_id' });
Users.hasMany(Posts, { foreignKey: 'user_id' });
Posts.belongsTo(Posts, { foreignKey: 'parent_id' });
Posts.hasMany(Posts, { foreignKey: 'parent_id' });
Likes.belongsTo(Posts, { foreignKey: 'post_id' });
Posts.hasMany(Likes, { foreignKey: 'post_id' });
Likes.belongsTo(Users, { foreignKey: 'user_id' });
Users.hasMany(Likes, { foreignKey: 'user_id' });
FollowingsFollowers.belongsTo(Users, { foreignKey: 'following_id' });
Users.hasMany(FollowingsFollowers, { foreignKey: 'following_id' });
FollowingsFollowers.belongsTo(Users, { foreignKey: 'follower_id' });
Users.hasMany(FollowingsFollowers, { foreignKey: 'follower_id' });

db.sync({ force: true })
.then(() => {
console.log('db synced');
})
.catch(() => {
console.log('error syncing db');
});

这是我尝试添加帖子的地方:

const addPost = (username, post) => {
return new Promise((resolve, reject) => {
Users.findOne({ where: { username: username } })
.then((user) => {
post.user_id = user.id;

Posts.create()
.then((created) => {
resolve();
});
})
.catch((err) => {
reject(err);
});
});
};

当我使用用户名和带有“type”和“body”键的对象调用此函数时,将创建一个 Post。但是,帖子包含“id”、“type”、“body”、“likesCount”、“createdAt”和“updatedAt”字段。 “user_id”字段永远不会添加到那里。

最佳答案

我不知道这是否会解决您的问题,但您没有将任何参数传递给 create() 方法。 post 对象被传递给函数,用 user_id 丰富并...被忽略。

不应该是这样的吗?:

(...)
Posts.create(post)
(...)

关于javascript - 我无法将数据插入到 Sequelize 中的表中(特别是外键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49058284/

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