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

标签 javascript postgresql sequelize.js

因此,我在 JavaScript 应用程序上使用 Sequelize 作为 PostgreSQL 数据库。我有 4 个模型(用户、帖子、点赞和关注者)。我的用户模型工作正常,它没有任何外键,因此我能够毫无问题地创建和查找数据。但是,我的 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;

这是我的帖子模型:

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”键的对象调用此函数时,会创建一个帖子。然而,帖子包含“id”、“type”、“body”、“likesCount”、“createdAt”和“updatedAt”字段。 “user_id”字段永远不会添加到其中。

最佳答案

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

不应该是这样吗?

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

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

相关文章:

javascript - Greasemonkey 用户脚本被内容安全策略阻止

javascript - 如何从这些 JSON 对象中过滤掉值

sql - 如何在 PostgreSQL 中插入不包括某些记录的多条记录

mysql - 在 Sequelize 中抓取关联类型

node.js - MongoDB 中的集群以及它如何获取核心

angularjs - 基于标志在 Sequelize 中添加 "where"查询

javascript - HTTP 请求的嵌入式凭据替代方案

javascript - 获取在 WP 中实现的 'slide down' js 面板

sql - 如何创建过程以一次运行不同的查询

postgresql - PostgreSQL 的 "COPY table FROM file"语句可以在 Go 中使用吗?