我有一个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存储库中看到了这些相关问题:
有谁知道解决方案?提前谢谢!
答案 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
可用于不区分大小写的搜索。