我正在为电子商务项目的订单搜索功能。我需要搜索订单ID和order.user.name。
const User = sequalize.define("user", {
name: {type: DataTypes.STRING(64), allowNull: true},
...
})
const Order = sequalize.define("order", {
id: {type: DataTypes.STRING, unique: true, allowNull: false, primaryKey: true}
})
User.hasMany(Order, {as: "user"})
Order.belongsTo(User)
我需要搜索order.id或order.user.name
这是我目前得到的:
const query = "John"
let whereClause = {}
if (query) {
whereClause = {
[Op.or]: [
{
id: {
[Op.like]: `%${query}%`
}
},
{
'$user.name$': {
[Op.like]: `%${query}%`
}
}
]
}
}
const orders = await models.Order.findAll({
where: whereClause,
include: [{
model: models.User,
as: 'user'
}]
})
我不断重复的错误是:
缺少表“user”的FROM-clause条目
更新日期:
问题解决了。
let whereClause = {}
if (search) {
whereClause = {
[Op.or]: [{
id: {
[Op.iLike]: `%${search}%`,
},
},
{
'$user.name$': {
[Op.iLike]: `%${search}%`,
},
},
]
}
}
const orders = await models.Order.findAll({
where: whereClause,
include: [{
model: models.User,
as: 'user'
}]
})
1条答案
按热度按时间kmbjn2e31#
可以将where子句添加到include本身。
这将返回所有与两个子句都匹配的用户连接的订单。