Sequelize 关联和查询此 mysql 查询
Posted
技术标签:
【中文标题】Sequelize 关联和查询此 mysql 查询【英文标题】:Sequelize associate and query for this mysql query 【发布时间】: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'
);
这似乎更方便,因为我正在动态设置位置和顺序, 但我对连接查询感到困惑。
请给点建议
谢谢
【问题讨论】:
【参考方案1】:为了能够在include
中显式指示连接模型,您还应该显式定义从Review
到UserReviewLike
的关联:
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,
);
【讨论】:
以上是关于Sequelize 关联和查询此 mysql 查询的主要内容,如果未能解决你的问题,请参考以下文章