3

I use postgresql/sequelize and findAndCountAll function.

   Entry.findAndCountAll({
        where: {TitleId: title.id},
        include: [
            {model: User, as: 'users', attributes: ['username']},
            {model: EntryHasLike} // I need to count this. model.
        ],
        offset: 15 * (req.body.page - 1),
        limit: 15
    }).then(entries => {
        res.json({
            title: title,
            count: entries.count,
            entries: entries.rows // [I want to count of likes inside this table]
        })
    }).catch(err => {}

I'm counting entries with findAndCountAll but I want additionally count of EntryHasLikes model which is the same with Entries.Id.

EntryHasLike model:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const EntryHasLike = sequelize.define('EntryHasLike', {
    EntryId: {
      type:DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true
    },
    UserId: {
      type:DataTypes.INTEGER,
      allowNull: false
    },
    likeDate: {
      type: DataTypes.DATE,
      allowNull: false,
      defaultValue: DataTypes.NOW
    }
  },{
    timestamps: false
  });
  EntryHasLike.associate = function(models) {
    EntryHasLike.belongsTo(models.User)
    EntryHasLike.belongsTo(models.Entry)
  };
  return EntryHasLike;
};

Entry model:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Entry = sequelize.define('Entry', {
    UserId: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    entry: {
      type: DataTypes.TEXT,
      allowNull: false
    },
    entryRev: {
      type: DataTypes.STRING,
      defaultValue: 1
    },
    entryRefId: {
      type: DataTypes.INTEGER,
      defaultValue: null
    },
    entryCondition: {
      type: DataTypes.INTEGER,
      defaultValue: 1
    },
    activity: {
      type: DataTypes.INTEGER,
      defaultValue: 1
    },
    TitleId: {
      type: DataTypes.INTEGER,
      allowNull: false
    }
  }, {});
  Entry.associate = function(models) {
    Entry.belongsTo(models.Title, {foreignKey: 'TitleId', as: 'titles'})
    Entry.belongsTo(models.User, {foreignKey: 'UserId', as: 'users'})
    Entry.belongsToMany(models.EntryCat, {through: 'EntryHasCats', as: 'entrycats'})
    Entry.belongsToMany(models.EntryTag, {through: 'EntryHasTags', as: 'entrytags'})
    Entry.hasMany(models.EntryHasLike)
  };
  return Entry;
};

I tried many solutions but i couldn't get result. As you see related questions in below but all of about findAll function. My function is findAndCountAll

Counting associated entries with Sequelize

Sequelize 'hasMany' associated(model) count in attributes in query execution

mehmetdemiray
  • 976
  • 4
  • 13
  • 32

1 Answers1

0

Maybe on client you can take length of Entry.EntryHasLike

setEntry(data) {
    this._entry = {
        ...data,
        count: data.EntryHasLike.length
    }
}
Tyler2P
  • 2,324
  • 26
  • 22
  • 31
School
  • 1