Sequelize包含多个where条件
Sequelize include with multiple where condition
我在将 Sequelize 与 include
一起使用时遇到了一些问题。问题是我的模型在 child table.
中使用了两个主键
所以它是这样的
Parent table
用户:ID,...
Post : Id, UserId(外键, 绑定到用户id), ...
Post 哈希标签:HashTag,PostId(外键,绑定到 Post id),UserId(外键,绑定到 Post table 的用户 id )
所以 table 层次结构看起来像这样
用户 - post - post 哈希标签
现在当我尝试这样做时,
Post.findAll(
include: {
model: post hash tag
}
)
然后它只搜索 post 哈希标签,其中 post 哈希标签的 post id table 等于 post id posttable
所以我这样添加
Post.findAll(
include: {
model: post hash tag
where: {
col1: models.sequelize.where(models.sequelize.col('POST.USER_ID'), '=', models.sequelize.col('POST_HASH_TAG.USER_ID'))
}
}
);
然后会在'where'子句出现问题,找不到Post.USER_ID。
如果我将 col1 值更改为 Post.userId 那么现在它解决了上述错误,但在 'on' 子句
处给出了另一个错误
你知道我该如何解决这个问题吗?
这里给出了完整的模型
用户
sequelize.define('User', {
id: { type: DataTypes.STRING(6), field: 'ID', primaryKey : true }
)
Post - 我知道多主声明不能正常工作,所以不用考虑太多
sequelize.define('Post', {
id: { type: DataTypes.STRING(6), field: 'ID', primaryKey: true },
userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true }
)
Post 哈希标签
sequelize.define('PostHashTag', {
postId: { type: DataTypes.STRING(6), field: 'POST_ID', primaryKey: true },
hashTag: { type: DataTypes.STRING(20), field: 'HASH_TAG', primaryKey: true },
userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true }
}
)
我使用的查询是
Post.findAll({
attributes: ['id', 'userId'],
where: {
userId: userId,
id: { $lt: postId }
},
include: [{
model: models.PostHashTag,
attributes: ['hashTag'],
where: {
col1: models.sequelize.where(models.sequelize.col('Post.USER_ID'), '=', models.sequelize.col('PostHashTag.userId'))
}]).then(...)
我自己找到了答案... col1:
models.sequelize.where(models.sequelize.col('Post.USER_ID'), '=', models.sequelize.col('PostHashTag.userId'))
这应该是
userId: models.sequelize.where(models.sequelize.col('POST.userId'), '=', models.sequelize.col('POST_HASH_TAG.USER_ID'))
这会奏效。 table 和括号中使用的列的物理名称
我在将 Sequelize 与 include
一起使用时遇到了一些问题。问题是我的模型在 child table.
所以它是这样的
Parent table
用户:ID,...
Post : Id, UserId(外键, 绑定到用户id), ...
Post 哈希标签:HashTag,PostId(外键,绑定到 Post id),UserId(外键,绑定到 Post table 的用户 id )
所以 table 层次结构看起来像这样 用户 - post - post 哈希标签
现在当我尝试这样做时,
Post.findAll(
include: {
model: post hash tag
}
)
然后它只搜索 post 哈希标签,其中 post 哈希标签的 post id table 等于 post id posttable
所以我这样添加
Post.findAll(
include: {
model: post hash tag
where: {
col1: models.sequelize.where(models.sequelize.col('POST.USER_ID'), '=', models.sequelize.col('POST_HASH_TAG.USER_ID'))
}
}
);
然后会在'where'子句出现问题,找不到Post.USER_ID。
如果我将 col1 值更改为 Post.userId 那么现在它解决了上述错误,但在 'on' 子句
处给出了另一个错误你知道我该如何解决这个问题吗?
这里给出了完整的模型
用户
sequelize.define('User', {
id: { type: DataTypes.STRING(6), field: 'ID', primaryKey : true }
)
Post - 我知道多主声明不能正常工作,所以不用考虑太多
sequelize.define('Post', {
id: { type: DataTypes.STRING(6), field: 'ID', primaryKey: true },
userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true }
)
Post 哈希标签
sequelize.define('PostHashTag', {
postId: { type: DataTypes.STRING(6), field: 'POST_ID', primaryKey: true },
hashTag: { type: DataTypes.STRING(20), field: 'HASH_TAG', primaryKey: true },
userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true }
}
)
我使用的查询是
Post.findAll({
attributes: ['id', 'userId'],
where: {
userId: userId,
id: { $lt: postId }
},
include: [{
model: models.PostHashTag,
attributes: ['hashTag'],
where: {
col1: models.sequelize.where(models.sequelize.col('Post.USER_ID'), '=', models.sequelize.col('PostHashTag.userId'))
}]).then(...)
我自己找到了答案... col1:
models.sequelize.where(models.sequelize.col('Post.USER_ID'), '=', models.sequelize.col('PostHashTag.userId'))
这应该是
userId: models.sequelize.where(models.sequelize.col('POST.userId'), '=', models.sequelize.col('POST_HASH_TAG.USER_ID'))
这会奏效。 table 和括号中使用的列的物理名称