【问题标题】:Sequelize relation "likes" does not exist续集关系“喜欢”不存在
【发布时间】:2019-04-19 17:40:40
【问题描述】:

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

关系“喜欢”不存在

我引用了一个类似的问题,但它并没有为我提供太多见解:

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;

【问题讨论】:

  • 你能发布你的模型定义吗?
  • 是的。一秒钟我会更新它。
  • 我更新了它。
  • 想通了下面的错误答案。

标签: postgresql sequelize.js


【解决方案1】:

而不是在迁移中添加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'
   )
  }
};

这给了我们

瞧!

和likeId关联在表上

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多