如何使用SequelizeJS实现搜索功能?

时间:2015-07-07 01:06:46

标签: sequelize.js

我有一个Ticket模型和一个Comment模型。故障单与Comment模型具有hasMany关系。我想通过关键字搜索门票。关键字将与故障单模型的主题属性和评论模型的主体属性相匹配。

以下代码不起作用:

var options = {
  where: {
    $or: [
      {
        subject: {
          like: '%' + query + '%'
        },
      },
      {
        'Comment.body': {
          like: '%' + query + '%'
        },
      }
    ]
  },
  include: [
    { model: Comment },
  ]
};

Ticket.findAll(options);

这是错误:“可能未处理的SequelizeDatabaseError:列Ticket.Comment.body不存在”

我也试过下面的代码,但它也不起作用:

var options = {
  where: {
    CompanyId: req.company.id,
    $or: [
      {
        subject: {
          like: '%' + query + '%'
        },
      },
      sequelize.cast(sequelize.col('comment.body'), 'TEXT', 'LIKE', '%' + query + '%')
    ]
  },
  include: [
    { model: Comment, as: 'comment', where: {} },
  ]
};

Ticket.findAll(options);

错误是:“可能未处理错误:评论(评论)与故障单无关!”

这一个:

var options = {
  where: {
    CompanyId: req.company.id,
    $or: [
      {
        subject: {
          like: '%' + query + '%'
        },
      },
      sequelize.where(sequelize.col('Comments.body'), 'LIKE', '%' + query + '%')
    ]
  },
  include: [
    { model: Comment},
  ]
};

Ticket.findAll(options);

错误:“可能未处理的SequelizeDatabaseError:缺少表格的FROM子句条目”评论“”

我正在使用SequelizeJS 2.0.4版

我在Github上的Sequelizejs存储库中看到了这些相关问题:

有谁知道解决方案?提前谢谢!

2 个答案:

答案 0 :(得分:16)

对你来说可能有点太晚了,但对其他人来说; #3095已使用解决方案的进行了更新:

var options = {
  where: {
    $or: [
      { 'subject': { like: '%' + query + '%' } },
      { '$Comment.body$': { like: '%' + query + '%' } }
    ]
  },
  include: [{ model: Comment }]
};

诀窍在于那些美元符号,但在设置limit或使用findAndCountAll()查询时,此解决方案有still problems

答案 1 :(得分:1)

const { Op } = require("sequelize");

var options = {
  where: {
    [Op.or]: [
      { 'subject': { [Op.like]: '%' + query + '%' } },
      { '$Comment.body$': { [Op.like]: '%' + query + '%' } }
    ]
  },
  include: [{ model: Comment }]
};

Op.iLike可用于不区分大小写的搜索。