在nodejs/express应用程序中使用sequelize查询多对多

dw1jzc5e  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(346)

我正在用mysql和sequelize构建nodejs/express后端,我正在努力解决通过关系进行查询的语法问题。
我有一个category表、一个media(images)表和一个join表mediacegory。我有一个包含类别id的rest路由,我想获取所选类别的所有媒体条目。
我在app.js中定义了模型和以下定义

Media.belongsToMany(Category, {
  through: {
    model: MediaCategory,
    unique: false
  },
  foreignKey: 'category_id',
  constraints: false
});

Category.belongsToMany(Media, {
  through: {
    model: MediaCategory,
    unique: false
  },
  foreignKey: 'media_id',
  constraints: false
});

我的getcategoryimages控制器方法是:

exports.getCategoryImages = (req, res, next) => {
  const categoryID = req.params.category;
  console.log("const categoryID: ", categoryID);

  Category.findAll({
    include: [{
      model: Media,
      where: {
        id: categoryID
      }
    }]
  })
    .then(categoryImages => {
      if (!categoryImages) {
        const error = new Error('Could not find categoryImages.');
        error.statusCode = 404;
        throw error;
      }
      res
        .status(200)
        .json({
          message: 'Fetched category images successfully.',
          items: categoryImages,
        });
    })
    .catch(err => {
      if (!err.statusCode) {
        err.statusCode = 500;
      }
      next(err);
    });

};

Postman 对网址的回复localhost:8080/categoryimages/16 这是:

{
    "message": "Fetched category images successfully.",
    "items": []
}

items数组中应该返回几十个图像记录。
恐怕我很难理解通过联接表获取的语法,我希望有人能指出我的错误之处。

oxalkeyp

oxalkeyp1#

问题是,我在app.js中的两个关联定义中颠倒了外键

Media.belongsToMany(Category, {
  through: {
    model: MediaCategory,
    unique: false
  },
  foreignKey: '*media_id* not *category_id*',
  constraints: false
});

Category.belongsToMany(Media, {
  through: {
    model: MediaCategory,
    unique: false
  },
  foreignKey: '*category_id* not *media_id*',
  constraints: false
});

media使用“media\u id”作为外键,category使用“category\u id”,而不是像我最初尝试的那样。
同样,正如艾玛在上面的评论中指出的那样 where: { id: categoryID } 块需要在include之外。

Category.findAll({
    include: [{
      model: Media
    }],
    where: {
      id: categoryID
    }
  })

相关问题