【问题标题】:Cannot associate tables in sequalize (node js + sequalize)无法在 sequelize 中关联表(节点 js + sequelize)
【发布时间】:2018-07-30 03:45:23
【问题描述】:

我有两个结构如下的表:

FeedPost id, text, likecount, commentcount

评论 id, text, lkpfeedpostid

所以有一个通过 lkpfeedpostid 从评论到 feedpost 的外键。所以一个 FeedPost 可以有很多评论。我正在尝试在 sequalize 中进行设置,这样当我执行 FeedPost.findAll() 时,它会拉回带有所有 cmets 的提要帖子。

我是这样设置的:

模型定义:

FeedPost:

module.exports = function(sequelize, DataTypes) {
  return sequelize.define('FeedPost', {
  ...
  ...
   }, {
    tableName: 'FeedPost',
    classMethods: {
      associate : function(models) {
        FeedPost.hasMany( Comment, { as: 'comments' });
      },
    },
  });
};

评论:

module.exports = function(sequelize, DataTypes) {
  return sequelize.define('Comment', {
  ...
  ...
   }, {
    tableName: 'Comment',
    classMethods: {
      associate : function(models) {
        Comment.belongsTo(FeedPost, { foreignKey: 'lkpfeedpostid'})
      },
    },
  });
};

我正在像这样导入它们:

const FeedPost = sequelize.import('../models/FeedPost');
const Comment = sequelize.import('../models/Comment');

并将它们传递给一个快速路由器,例如:

app.use(feed(FeedPost, Comment));

module.exports = (FeedPost, Comment) => {
  const api = Router();

  api.get('/api/feed', (req, res) => {
    FeedPost.findAll( { include: [ {model: Comment, as: 'Comment' }]}).then(results => {
      res.json({results});
    });
}

我已经尝试了这些链接中的大量变体:

每当我到达路线时,我都会不断收到错误提示

Unhandled rejection SequelizeEagerLoadingError: Comment is not associated to Feed!

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    我假设您的续集版本 >=4。

    classMethodsinstanceMethods 已被删除。可以在这里找到更新日志:Sequelize V4 Breaking Changes

    从他们的docs,您可以参考当前方法来指定关联。

    FeedPost

    module.exports = function(sequelize, DataTypes) {
      const FeedPost =  sequelize.define('FeedPost', {/*Attributes here*/});
        FeedPost.hasMany(Comment, { as: 'comments' })
    };
    

    评论

    module.exports = function(sequelize, DataTypes) {
      const Comment =  sequelize.define('Comment', {/*Attributes here*/});
        Comment.BelongsTo(Comment, { foreignKey: 'lkpfeedpostid', targetKey: 'id' })
    };
    

    以下查询应该有效:

    FeedPost.findAll( { include: [ {model: Comment, as: 'comments' }]})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多