问题描述
在我的私人项目中使用Sequelize期间,我只有一张桌子
const Order= sequelize.define('Order',{
_id: {
type: DataTypes.INTEGER,primaryKey: true,autoIncrement: true
},value: {
type: DataTypes.INTEGER,allowNull: false
},_order_tracker_id: {
type: DataTypes.INTEGER,allowNull: true
},type: {
type: DataTypes.INTEGER,Order.associate = function(models) {
const {Order} = models
Order.hasMany(Order,{
as: 'tempOrder',foreignKey: '_order_tracker_id',onDelete: 'RESTRICT',onUpdate: 'RESTRICT'
})
}
});
我正在使用Sequelize来查询数据:
const { Order} = sequelize.models
const oSequelize = {
attributes: [
'_id','value',],raw: false,include: [
{
model: Order,as: 'tempOrder',attributes: ['value' as 'tracker_value'],where: {
[Op.or]: [
{
value: {
[Op.gt]: 1
}
},{
'$tempOrder.value$': { [Op.gt]: 1 }
}
]
},required: false
},
我希望它会在此SQL中显示相同的结果:
SELECT T1._id,T1.value,T1._order_tracker_id,T2.value as tracker_value
FROM Order as T1
JOIN Order as T2 ON T1._id = T2._order_tracker_id
WHERE T1.type = 1 AND (T1.value > 1 OR T2.value > 1)
更多说明:例如,我有这张桌子
_id value _order_tracker_id type
1 100 null 1
2 0 null 1
3 300 2 2
要在用户界面中显示数据,我希望查询的结果将是这样
_id value _order_tracker_id tracker_value
1 100 null
2 0 null 300
我的难题是:我不知道如何转移(T1.value > 1 OR T2.value > 1)
来语法化。
如何更改Sequelize配置以达到预期效果?
解决方法
我在这里显示了此示例,请尝试此示例。希望对您有帮助。
谢谢
const { Order} = sequelize.models
const oSequelize = Table1.findAll({
attributes: [
'_id','value',],raw: false,where: {
[Op.or]: [
{
value: {
[Op.gt]: 1
}
},{
'$table2.value$': { [Op.gt]: 1 }
}
]
},include: [
{
model: Table2,as: 'table2',attributes: ['value' as 'tracker_value'],required: false
},]
})