【问题标题】:How to query many to many relationship sequelize?如何查询多对多关系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);
            }
        }
    );

【问题讨论】:

  • 感谢这个带有示例的清晰问题,我什至从中学到了!

标签: javascript mysql node.js sequelize.js


【解决方案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 你刚刚用最后一条评论救了我的命。谢谢你
  • 如果我想搜索多个金额怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2013-08-28
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多