连续过滤包含

时间:2018-06-27 07:04:58

标签: node.js sequelize.js

我有一个photo模型和一个tags模型。我使用以下查询显示的内容

models.photo
    .findAll({
        limit: 50,
        offset: ctx.offset,
        include :[{
            model: models.tags,
            as: 'tags'
        },{
            model: models.description,
            as: 'desc'
        }]
    })
  .then((photos) => {
    ctx.res.send(photos);
   });

我的问题是,如何过滤包含特定标签的照片?它们使用

关联
models.photo.hasMany(models.tags, {foreignKey: 'photo', sourceKey: 'name'});

例如,如果用户要过滤鸭子,那么我应该能够显示鸭子的所有照片以及与它们相关的所有标签?

2 个答案:

答案 0 :(得分:0)

您可以在Sequelize.literal()中使用where子句,以下示例可能会对您有所帮助

const filterTagName = 'duck';
models.photo
    .findAll({
        where: Sequelize.literal(`tags.name = '${filterTagName}'`), // assuming you have a field name in tags model and model name is tags
        limit: 50,
        offset: ctx.offset,
        include :[{
            model: models.tags,
            as: 'tags'
        },{
            model: models.description,
            as: 'desc'
        }]
    })
  .then((photos) => {
    ctx.res.send(photos);
   });

答案 1 :(得分:0)

您可以内部加入phototags 然后通过您的属性过滤tags

models.photo
    .findAll({
        limit: 50,
        offset: ctx.offset,
        include :[{
            model: models.tags,
            as: 'tags',
            where: {
                tag_name: 'duck'
            },
            required: true
        }]
    })
    .then((photos) => {
        ctx.res.send(photos);
    });