不存在关系“喜欢”

时间:2019-04-19 17:40:41

标签: postgresql sequelize.js

我不明白为什么续集会给我这个错误。

  

关系“喜欢”不存在

我引用了类似的问题,但是并没有为我提供很多见识:

Sequelize Error: Relation does not exist

这也是

Sequelize Migration: relation <table> does not exist

我的表名称与参考模型名称匹配。

我认为这与模型无关,但与迁移文件有关。

这就是我所拥有的

帖子迁移

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Posts', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      title: {
        type: Sequelize.STRING
      },
      post_content: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      userId: {
        type: Sequelize.INTEGER,
        references: {
          model: 'Users',
          key: 'id'

        }
      },
      likeId: {
        type: Sequelize.INTEGER,
        onDelete: 'CASCADE',
        references: {
          model: 'Likes',
          key: 'id'
        }
      },
      username: {
        type: Sequelize.STRING
      },
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Posts');
  }
};

喜欢迁移

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Likes', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      like: {
        type: Sequelize.BOOLEAN
      },
      userId: {
        type: Sequelize.INTEGER,
        references: {
          model: 'Users',
          key: 'id',
          as: 'userId'

        }
      },
      postId: {
        type: Sequelize.INTEGER,
        references: {
          model: 'Posts',
          key: 'id',
          as: 'postId'
        }
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Likes');
  }
};

models / like.js

'use strict';

const Like = (sequelize, DataTypes) => {
    const Likes = sequelize.define('Likes', {
      like:{
        type:DataTypes.BOOLEAN,
        allowNull:true
      }
    }, {});
    Likes.associate = function(models) {
      Likes.belongsTo(models.User, {
        onDelete: "CASCADE",
        foreignKey: {
          foreignKey: 'userId'
        }
      }) 
      Likes.belongsTo(models.Post, {
        onDelete: 'CASCADE',
        foreignKey: 'likeId',
        targetKey: 'id',      
      })  
  }
    return Likes;
};
module.exports = Like;

models / post.js

module.exports = (sequelize, DataTypes) => {
  const Post = sequelize.define('Post', {
    title: DataTypes.STRING,
    post_content: DataTypes.STRING,
    username:  DataTypes.STRING
  }, {});
  Post.associate = function(models) {
    Post.belongsTo(models.User, {  foreignKey: 'userId',  targetKey: 'id' });
    Post.belongsTo(models.Likes, {  foreignKey: 'likeId',  targetKey: 'id' });
  };
  return Post;
};

models / user.js

'use strict';

const User = (sequelize, DataTypes) => {
  const myUser = sequelize.define('User', {
    username: DataTypes.STRING,
    email: DataTypes.STRING,
    password: DataTypes.STRING,
    resetPasswordToken:DataTypes.STRING,
    resetPasswordExpires: DataTypes.DATE
  }, {});

  myUser.associate = function(models) {

    myUser.hasMany(models.Post, { foreignKey: 'userId', as:'users' });
    myUser.hasMany(models.Likes, { foreignKey: 'userId', as:'likes' });
  };

  return myUser;
};

module.exports = User;

1 个答案:

答案 0 :(得分:0)

不要在迁移中添加likeId。我需要像这样添加新的迁移

sequelize migration:generate --name add_likeId_to_posts

所以我们现在有

'use strict';

module.exports = {
  up: function (queryInterface, Sequelize) {
     return queryInterface.addColumn(
      'Posts',
      'likeId',
      {
        type: Sequelize.INTEGER,
        allowNull: false,
        references: {
          model: 'Likes',
          key: 'id'
        }
      }
    )
  },

  down: function (queryInterface, Sequelize) {
     return queryInterface.removeColumn(
     'Posts',
     'likeId'
   )
  }
};

这给了我们

瞧!

enter image description here

与likeId关联在表上

enter image description here