繁体   English   中英

在续集中的哪里或哪里通过

[英]WHERE OR WHERE THROUGH in Sequelize

所以我有 3 个表: PostPivotCategory

Post表中有一个字段 main category = main_category_id帖子一次可以有一个主要类别。

然后数据透视表用作次要类别的枢轴,帖子可以有超过 1 个。

Pivot 中的字段

  • post_id
  • 类别编号

我正在尝试获取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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM