【问题标题】:Sequelize associate and query for this mysql querySequelize 关联和查询此 mysql 查询
【发布时间】:2022-01-22 04:37:52
【问题描述】:

我只想在 sequelize 中执行这个简单的 mysql 查询,但这真的很混乱..

SELECT *,
       (SELECT COUNT(*)
         FROM  user_review_like
        WHERE  user_review_like.review_id = review.id)
FROM  reviews

所以我就这样尝试了。

const reviewList = await Review.findAndCountAll({
  attributes: ['*', fn('COUNT', col('user_review_like'))],
  include: [
    {
      model: UserReviewLike,
      attributes: [],
    },
  ],
  where,
  raw: true,
  offset: offset,
  limit: 5,
  order,
});

但它说'userReviewLike 与评论无关!'

模型“审查”:

static associate(db) {
  db.Review.belongsTo(db.User); --> for matching review writer and users
  db.Review.belongsToMany(db.User, {through: 'user_review_like', foreignKey: 'review_id'});
}

模型“用户”:

static associate(db) {
  db.User.hasMany(db.Review);
  db.User.belongsToMany(db.Review, {through: 'user_review_like', foreignKey: 'user_id'});
}

模型'userReviewLike':

{
    user_id: {
    },
    review_id: {
    },
  },
static associate(db) {
db.UserReviewLike.belongsTo(db.User, {
  foreignKey: 'user_id'
});
db.UserReviewLike.belongsTo(db.Review, {
  foreignKey: 'review_id'
});

}

这似乎更方便,因为我正在动态设置位置和顺序, 但我对连接查询感到困惑。

请给点建议

谢谢

【问题讨论】:

    标签: mysql node.js orm sequelize.js sequelize-cli


    【解决方案1】:

    为了能够在include 中显式指示连接模型,您还应该显式定义从ReviewUserReviewLike 的关联:

    db.Review.hasMany(db.UserReviewLike, { foreignKey: 'review_id' })
    

    我想能够使用COUNT 作为子查询你需要使用Sequelize.literal,否则你会得到类似SELECT *, COUNT(*) ...的东西

    const reviewList = await Review.findAndCountAll({
      attributes: { include: [
        [literal('(SELECT COUNT(*)
             FROM  user_review_like
            WHERE  user_review_like.review_id = review.id)'), 'like_count']
      ]
      },
      where,
      raw: true,
      offset: offset,
      limit: 5,
      order,
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多