如何查询多对多关系sequelize?

Posted

技术标签:

【中文标题】如何查询多对多关系sequelize?【英文标题】:How to query many to many relationship sequelize? 【发布时间】:2016-12-15 21:05:03 【问题描述】:

表有多对多的关系,由一个订单表连接。

出口 --> 订单

我想获取今天订单的奥特莱斯列表。

所以这里有一个获取所有网点的函数:

db.Outlet.findAll(include: [
    model:db.Product, attributes: ['id', 'name', 'nameKh']
    ]).then(function(outlets)
    return res.jsonp(outlets);
)

我得到了这个结果:

我只能选择 where Product Id by using this:

db.Outlet.findAll(include: [
    model:db.Product, attributes: ['id', 'name', 'nameKh'], where: id: 2
    ]).then(function(outlets)
    return res.jsonp(outlets);
)

如何查询具体的订单金额,或者今天的订单日期?

这是我的模型:

出口:

var Outlet = sequelize.define('Outlet', 
            outletCode: DataTypes.STRING,
            outletName: DataTypes.STRING,
            outletNameKh: DataTypes.STRING,
            outletSubtype: DataTypes.STRING,
            perfectStoreType: DataTypes.STRING,
            address: DataTypes.STRING
        ,
        
            associate: function(models)
                Outlet.belongsToMany(models.Product, through: models.Order);
                Outlet.belongsTo(models.Distributor);
                // Outlet.hasMany(models.Order);
            
        
    );

产品:

var Product = sequelize.define('Product', 
            inventoryCode: DataTypes.STRING,
            name: DataTypes.STRING,
            nameKh: DataTypes.STRING,
            monthlyCaseTarget: DataTypes.INTEGER,
            pieces: DataTypes.INTEGER,
            star: DataTypes.BOOLEAN,
            price: DataTypes.FLOAT,
            active: DataTypes.BOOLEAN
        ,
        
            associate: function(models)
                Product.belongsToMany(models.Outlet, through: models.Order);
                Product.belongsTo(models.Category);
                // Product.hasMany(models.Order);
            
        
    );

订单:

var Order = sequelize.define('Order', 
            id: 
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true
            ,
            amount: DataTypes.INTEGER
        ,
        
            associate: function(models)
                Order.belongsTo(models.Outlet);
                Order.belongsTo(models.Product);
                Order.belongsTo(models.User);
            
        
    );

【问题讨论】:

感谢这个带有示例的清晰问题,我什至从中学到了! 【参考方案1】:

试试看:

db.Outlet.findAll(
    include: [
        model:db.Product, 
        attributes: ['id', 'name', 'nameKh'], 
        through:  where:  amount: 10  
    ]
)

【讨论】:

可以在哪里放出包含? 是的,@Ron。你应该像 ..findAll(include:[...], where: '$product.amout$': 10 ) 这样包装 where 语句 @TilekbekovYrysbek 你刚刚用最后一条评论救了我的命。谢谢你 如果我想搜索多个金额怎么办?

以上是关于如何查询多对多关系sequelize?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sequelize 中按多对多关系排序?

在 Sequelize.js 中为多对多关系添加默认角色

从多对多关系中获取结果

Sequelize 多对多关系同一张表

Node.js / Sequelize.js / Express.js - 如何插入多对多关联? (同步/异步?)

Sequelize 多对多自引用