繁体   English   中英

Sequelize.js查询通过关系获得总计数

[英]Sequelize.js query to get total count through relationship

我正在使用sequelize来获得关系中的总数。 我需要通过透视表连接的父表中的customerId 普通查询看起来像这样:

SELECT count(p.*) FROM parcels as p
LEFT JOIN orders_parcels as op ON op."parcelId" = p.id
LEFT JOIN orders as o ON op."orderId" = o.id
WHERE o."customerId"=1

这很好用。 但不知道如何获得续集查询。

Parcel.findAndCountAll();

编辑:OrderParcel

var OrderParcel = service.sequelize.define('OrderParcel', {

    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    }
}, {
    tableName: 'orders_parcels',
    freezeTableName: true,
    paranoid: true
});

module.exports = OrderParcel;

var Order = require('./Order');

OrderParcel.belongsTo(Order, {
    as: 'Order',
    foreignKey: 'orderId'
});

var Parcel = require('../parcel/Parcel');

OrderParcel.belongsTo(Parcel, {
    as: 'Parcel',
    foreignKey: 'parcelId'
});

一种方法是使用sequelize.query

由于通常有一些用例可以更容易地执行原始/已准备好的SQL查询,因此可以使用函数sequelize.query

var query = "SELECT count(p.*) FROM parcels as p" +
" LEFT JOIN orders_parcels as op ON op."parcelId" = p.id" +
" LEFT JOIN orders as o ON op."orderId" = o.id" +
" WHERE o.customerId=1;";

sequelize.query(query, { type: sequelize.QueryTypes.SELECT}).success(function(count){
    console.log(count); // It's show the result of query          
    res.end();
}).catch(function(error){            
    res.send('server-error', {error: error});
});

原始查询文档

假设您已定义关联,则可以使用Model.findAndCountAll 它看起来像这样:

Parcel.findAndCountAll({
  include: [{
    model: OrderParcel,
    required: true,
    include: [{
      model: Order,
      where: {
        customerId: idNum
      }
    }]
  }]
}).then(function(result) { 

});

我完全同意Evan Siroky的方法,但代码必须简化才能正常工作:

Parcel.findAndCountAll({
include: [{
  model: Order,
  where: {
    customerId: idNum
  },
  duplicating: false // Add this line for retrieving all objects
}]
}).then(function(result) { 
   console.log('Rows: ' + result.rows + ' Count: ' + result.count)
});

请记住使用belongsToMany方法连接模型!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM