поэтому у меня есть 3 таблицы: Пост , Сводка , Категория
в таблице Пост есть поле для главной категории = main_category_id сообщение может иметь по одной главной категории за раз.
, а затем таблица Pivot служит основой для вторичной категории, которую может разместить публикация иметь более 1.
полей в Pivot
Я пытаюсь чтобы получить Post , где 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;
};
Модель Pivot
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"
})