Продолжить ассоциации, не отображаемые в pgAdmin

#node.js #database #postgresql #express #sequelize.js

#node.js #База данных #postgresql #экспресс #sequelize.js

Вопрос:

Я создаю конечные точки RestAPI для приложения для социальных сетей, такого как Instagram.

Есть 4 таблицы

  1. Пользователь
  2. Публикация
  3. постЛайки
  4. 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, я не вижу никакого внешнего ключа.

введите описание изображения здесь

введите описание изображения здесь

PS Я имею в виду эту статью https://dev.to/nedsoft/getting-started-with-sequelize-and-postgres-emp

Ответ №1:

В приведенном выше блоге парень никогда не говорил нам, что мы должны добавить

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

внутри миграций….

Обратитесь к этой странице… Просто CTRL F для ForeignKey на странице, и вы попадете туда. Продолжить ДОКУМЕНТЫ

Потрачено более 4 часов на это