首页 > 解决方案 > 创建一个 post 表,将 userID 添加到 post 表中,并将 postID 自动添加到 sequlize 中的 image 表中

问题描述

我想使用 sequelize 使用 nodejs 和 postgresql 创建一个帖子创建功能。模型包括用户表、帖子表和图像。我不知道如何为表创建外键链接,所以当用户登录并创建帖子时,它会将用户 ID 添加到帖子表以及将帖子 ID 添加到图像表中,谁能帮助我我可以绘制架构?以及如何创建帖子?

// 移民

// user
'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      firstName: {
        type: Sequelize.STRING,
        allowNull: false
      },
      lastName: {
        type: Sequelize.STRING,
        allowNull: false
      },
      username: {
        type: Sequelize.STRING,
        allowNull: false
      },
      password: {
        type: Sequelize.STRING,
        allowNull: false
      },
      email: {
        type: Sequelize.STRING
      },
      phone: {
        type: Sequelize.STRING
      },
      gender: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Users');
  }
};
// post
'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Posts', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      userID: {
        type: Sequelize.INTEGER,
        allowNull: false,
        references: {
          model: 'Users',
          key: 'id'
        }
      },
      description: {
        type: Sequelize.TEXT
      },
      like: {
        type: Sequelize.INTEGER,
        defaultValue: 0
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Posts');
  }
};
// image
'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Images', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      postID: {
        type: Sequelize.INTEGER,
        allowNull: false,
        references: {
          model: 'Posts',
          key: 'id'
        }
      },
      urlImage: {
        type: Sequelize.STRING,
        allowNull: false
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Images');
  }
};

// 楷模

// user
use strict';
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    username: DataTypes.STRING,
    password: DataTypes.STRING,
    email: DataTypes.STRING,
    phone: DataTypes.STRING,
    gender: DataTypes.STRING
  }, {});
  User.associate = function(models) {
    User.hasMany(models.Post, {refeignKey: 'userID'})
    User.hasMany(models.Comment, {refeignKey: 'userID'})
    User.hasMany(models.Follow, {refeignKey: 'userID'})
    User.hasMany(models.Follow, {refeignKey: 'userID_follow'})
  };
  return User;
};
//post
'use strict';
module.exports = (sequelize, DataTypes) => {
  const Post = sequelize.define('Post', {
    description: DataTypes.STRING,
    like: DataTypes.INTEGER
  }, {});
  Post.associate = function(models) {
    Post.belongsTo(models.User, {refeignKey: 'userID'})
    Post.hasOne(models.Image, {refeignKey: 'postID'})
    Post.hasOne(models.Comment, {refeignKey: 'postID'})
  };
  return Post;
};
//image
'use strict';
module.exports = (sequelize, DataTypes) => {
  const Image = sequelize.define('Image', {
    urlImage: DataTypes.STRING
  }, {});
  Image.associate = function(models) {
    Image.belongsTo(models.Post, {refeignKey: 'postID'})
  };
  return Image;
};

// 路由器

const result = await Post.create({
            description: postInfo.description,
            Image: {
            urlImage: postInfo.urlImage
            }
            },{
               include: Image
            })

错误:列 \"userID\" 中的空值违反非空约束

标签: node.jspostgresqlsequelize.js

解决方案


推荐阅读