【问题标题】:How to use sequelize(mysql) to count datas with angularjs + nodejs?如何使用 sequelize(mysql) 用 angularjs + nodejs 统计数据?
【发布时间】:2017-12-05 13:11:21
【问题描述】:

我在mysql中有三个表

  1. 联系方式
  2. 联系人组

这是我的表结构:

var Contact = sequelize.define('contact', {
    gsm: {
        type: Sequelize.STRING,
        unique: true,
        required: true
    },
    firstName: Sequelize.STRING,
    lastName: Sequelize.STRING,
    street: Sequelize.STRING,
    city: Sequelize.STRING,
    region: Sequelize.STRING,
    postcode: Sequelize.STRING,
    dob: Sequelize.DATE,
    email: {
        type: Sequelize.STRING,
        unique: true,
        defaultValue: true
    },
    company: Sequelize.STRING,
    url: Sequelize.STRING,
    country: Sequelize.STRING,
    data1: Sequelize.STRING,
    data2: Sequelize.STRING,
    data3: Sequelize.STRING,
    //  resetPasswordToken: Sequelize.STRING,
    //  resetPasswordExpires: Sequelize.DATE,
    //  lastLoggedIn: Sequelize.DATE
})


var Group = sequelize.define('group', {
    groupname: {
        type: Sequelize.STRING,
        unique: true,
        required: true
    },
})

var ContactGroup = sequelize.define('contactgroup', {
    /* Empty */
})

ContactGroup.belongsTo(Contact, {
    onDelete: 'CASCADE'
});
ContactGroup.belongsTo(Group, {
    onDelete: 'CASCADE'
});

Group.hasMany(ContactGroup, {
    onDelete: 'CASCADE'
});

我的场景: 我的项目中有两个 UI:

1.联系方式 2.分组

步骤1:首先用户可以添加群组,然后用户将去创建新联系人,此联系人可能包含许多群组或没有群组(群组数据来自群组的下拉列表表,哪个用户在 STEP 1 上完成了这个操作)

例如实时场景:

我是进入应用的用户,

第 1 步:我将添加名为 'angulargroup' 的新组。

第 2 步: 我将在联系人中添加我的详细信息并在下拉列表中选择 angulargroup,这样我就可以属于 angulargroup 现在用户交互结束了。

现在我得到了联系人 ID 和组 ID,我将此组 ID 和联系人 ID 存储在名为 ContactGroup 的表中,如下所示:

所以最后帮我显示组数:

我在 angulargroup 中只添加了一个联系人,所以我想在下图中将 CONTACT COUNT 显示为 1:

如果我在 angulargroup 中添加了两个 contacts 来代替contactcount,我想将contactcount 显示为2

我的 api.js 代码:

exports.getNewGroup = function(req, res) {
    Group.findAndCountAll({
        attributes: ['id', [sequelize.fn('COUNT', sequelize.col('contactgroups.groupId')),
            'contactCount'
        ]],
        include: [{
            model: ContactGroup,
        }]
    }).then(function(data) {
        return res.status(200).send(data);
    }).catch(function(err) {
        return res.status(400).send(err.message);
    });
};

现在如何在 UI 中显示它:

table.table
 tr
  th(style='display : none;') S.no
  th Name
  th Contacts Count
 tr(ng-repeat='group in groups | filter:test')
  td(style='display : none;') {{$index+1}}
  td {{group.groupname}}  
  td {{group.contactId}}

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    终于明白了:

    答案如下:

    我的 api.js:

    exports.getNewGroup = function (req, res) {
        Group.findAll({
            attributes: {
                include: [
                    [sequelize.fn('COUNT', sequelize.col('contactgroups.groupId')), 'contactsCount']
                ],
            },
            include: [{
                model: ContactGroup,
                attributes: [],
            }],
            group: ['Group.id'],
            raw: true
        }).then(function (data) {
            return res.status(200).send(data);
        }).catch(function (err) {
            return res.status(400).send(err.message);
        });
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2017-11-26
      • 2017-05-08
      • 2013-10-21
      • 1970-01-01
      相关资源
      最近更新 更多