[英]WHERE OR WHERE THROUGH in Sequelize
所以我有 3 个表: Post , Pivot , Category
在Post表中有一个字段 main category = main_category_id帖子一次可以有一个主要类别。
然后数据透视表用作次要类别的枢轴,帖子可以有超过 1 个。
Pivot 中的字段
我正在尝试获取main_category = id或枢轴具有category_id = id的帖子
当前代码:
var mainPost = await models.t_post.findAll({
where:{
main_category_id:main.id
},
include: [{
model: models.m_category,
as:"secondary_category",
through: {
where: {category_id: main.id},
},
attributes: ['id']
}],
order:[
['createdAt',"desc"]
],
limit:limit,
offset:3+(limit*page)-limit,
})
编辑:添加模型
岗位模型
module.exports = (sequelize, DataTypes) => {
const T_Post = sequelize.define('t_post', {
user_id: DataTypes.INTEGER,
title: DataTypes.STRING,
subtitle: DataTypes.STRING,
content: DataTypes.TEXT,
excerpt: DataTypes.TEXT,
thumbnail: DataTypes.STRING,
thumbnail_caption: DataTypes.STRING,
slug: DataTypes.STRING,
permalink: DataTypes.STRING,
template: DataTypes.INTEGER,
published: DataTypes.BOOLEAN,
published_date: DataTypes.DATE,
}, {
timestamps: true,
paranoid:true,
underscored: true,
freezeTableName: true,
tableName: 't_post',
paranoid: true,
});
return T_Post;
};
枢轴模型
module.exports = (sequelize, DataTypes) => {
const m_post_category = sequelize.define('m_post_category', {
category_id: DataTypes.INTEGER,
post_id: DataTypes.INTEGER,
}, {
timestamps: true,
paranoid:true,
underscored: true,
freezeTableName: true,
tableName: 'm_post_category'
});
return m_post_category;
};
类别模型
module.exports = (sequelize, DataTypes) => {
const m_category = sequelize.define('m_category', {
name: DataTypes.STRING,
slug: DataTypes.STRING,
template_id: DataTypes.STRING,
is_active: DataTypes.BOOLEAN,
has_title: DataTypes.BOOLEAN,
has_sub_menu: DataTypes.BOOLEAN,
}, {
timestamps: true,
paranoid:true,
underscored: true,
freezeTableName: true,
tableName: 'm_category'
});
return m_category;
};
协会
//Get Main category in this post
t_post.belongsTo(m_category,{
foreignKey:"main_category_id",
as:"main_category"
})
//Get secondary category in this post
t_post.belongsToMany(m_category,{
through: m_post_category,
as: 'secondary_category',
foreignKey: 'post_id'
})
//Get post that have this category as secondary category
m_category.belongsToMany(t_post,{
through: m_post_category,
as: 'article_as_secondary',
foreignKey: 'category_id'
})
//Eager Loading get post with this category **category.posts**
m_category.hasMany(t_post,{
as:"posts",
foreignKey:"main_category_id"
})
请参考以下代码以您想要的方式过滤记录 -
const mainPost = await models.t_post.findAll({
// where:{
// main_category_id:main.id
// },
include: [
{
model: models.m_category,
as: 'secondary_category',
// through: {
// where: {category_id: main.id},
// },
attributes: ['id']
}
],
where: {
[op.or]: [
db.sequelize.literal(`\`t_post\`.\`main_category_id\` = ${main.id}`),
db.sequelize.literal(`\`m_category\`.\`category_id\` = ${main.id}`)
]
},
order: [['createdAt', 'desc']],
limit: limit,
offset: 3 + limit * page - limit
});
我希望它有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.