【问题标题】:Sequelize Associations not showing up in pgAdminSequelize 关联未出现在 pgAdmin 中
【发布时间】:2022-01-15 07:24:40
【问题描述】:

我正在为 Instagram 等社交媒体应用创建 restApi 端点。

有4张桌子

  1. 用户
  2. 发布
  3. 点赞
  4. 后媒体

协会... 一个用户有很多帖子, 一个帖子属于一个用户, 一个帖子有很多帖子喜欢, 一个帖子有很多帖子媒体, 一个 postLike 属于一个帖子,属于一个用户, 一个 postMedia 属于一个帖子,

如果你仍然有点不清楚请评论任何帮助将不胜感激。

models/user.js

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class User extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here????????????????????????????
      User.hasMany(models.Post, {
        foreignKey: 'user_id',
        as: 'posts',
        onDelete: 'CASCADE',
      });
      User.hasMany(models.postLikes, {
        foreignKey: 'user_id',
        as: 'postLikes',
        onDelete: 'CASCADE',
      });
    }
  };
  User.init({
    profile_img: DataTypes.STRING,
    firstname: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING,
    phone: DataTypes.STRING,
    password: DataTypes.STRING,
    dob: DataTypes.STRING,
    gender: DataTypes.ENUM('male', 'female'),
    token: DataTypes.STRING,
    is_deleted: DataTypes.BOOLEAN,
  }, {
    sequelize,
    modelName: 'User',
  });
  return User;
};

models/post.js

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class Post extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here????????????????????????
      Post.hasMany(models.postLikes, {
        foreignKey: 'post_id',
        as: 'postLikes',
        onDelete: 'CASCADE',
      });
      Post.hasMany(models.postMendia, {
        foreignKey: 'post_id',
        as: 'postMedia',
        onDelete: 'CASCADE',
      })
    }
  };
  Post.init({
    description: DataTypes.STRING,
    user_id: DataTypes.INTEGER,
    is_deleted: DataTypes.BOOLEAN,
  }, {
    sequelize,
    modelName: 'Post',
  });
  return Post;
};

models/postLikes.js

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class postLikes extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here????????????????????
      postLikes.belongsTo(models.Post, {
        foreignKey: 'post_id',
        as: 'post',
      });
      postLikes.belongsTo(models.User, {
        foreignKey: 'user_id',
        as: 'user',
      })
    }
  };
  postLikes.init({
    post_id: DataTypes.INTEGER,
    user_id: DataTypes.INTEGER
  }, {
    sequelize,
    modelName: 'postLikes',
  });
  return postLikes;
};

models/postMedia.js

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class postMedia extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here????????????????????????????
      postMedia.belongsTo(models.Post, {
        foreignKey: 'post_id',
        as: 'post'
      })
    }
  };
  postMedia.init({
    url: DataTypes.STRING,
    post_id: DataTypes.INTEGER,
    type: DataTypes.ENUM('image', 'video')
  }, {
    sequelize,
    modelName: 'postMedia',
  });
  return postMedia;
};

在上述所有模型中创建关联后,我正在运行命令 sequelize db:migrate

但是当我打开 pgAdmin4 控制台时,我看不到任何外键。

附注我指的是这篇文章https://dev.to/nedsoft/getting-started-with-sequelize-and-postgres-emp

【问题讨论】:

    标签: node.js database postgresql express sequelize.js


    【解决方案1】:

    在上面给出的博客中,家伙从未告诉我们必须添加

          references: {
              model: {
                tableName: 'Users',
                schema: 'public'
              },
    

    迁移内部....

    参考这个页面... 只需 CTRL+F 在页面上输入外键,你就会到达那里。 Sequelize DOCS

    为此浪费了 4 个多小时

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 2019-08-25
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      相关资源
      最近更新 更多