在Sequelize中使用Tinder之类的Match SQL查询

时间:2018-12-14 12:51:39

标签: node.js sequelize.js

我正在尝试一种功能,以吸引所有喜欢我但不喜欢我的用户,就像在Tinder中一样。我的数据库架构如下:

const User = require('./user/model')
const Favorite = require('./favorite/model')

Favorite.belongsTo(User, {
  as: 'User',
  foreignKey: 'UserId'
})

Favorite.belongsTo(User, {
  as: 'FavoritedUser',
  foreignKey: 'Favorited'
})

我最喜欢的表如下:

const Model = instance.define('Favorite', {
  UserId: {
    type: Sequelize.INTEGER,
    allowNull: false,
    references: {
      model: 'Users',
      key: 'id'
    },
    unique: 'favorite-uniqueness'
  },
  Favorited: {
    type: Sequelize.INTEGER,
    allowNull: false,
    references: {
      model: 'Users',
      key: 'id'
    },
    unique: 'favorite-uniqueness'
  },
  type: {
    type: Sequelize.STRING,
    allowNull: false,
    defaultValue: 'normal'
  }
}, { timestamps: true, paranoid: true })

UserId属于收藏Favorited用户ID的用户。

让我们考虑一下我的用户ID为1的表结构

用户ID偏爱

  • 2-1
  • 3-1
  • 1-3

我喜欢ID为3的用户,她也喜欢我。因此,我希望查询提供UserId 2(表明她不喜欢我,即使我喜欢他)。

我想出的是:

router.get('/liked-me', isAuthenticated, ({ user }) => {
  return Favorite.findAll({
    where: {
      Favorited: user.id
    },
    include: [
      {
        model: User,
        as: 'User'
      }
    ]
  })
});

感谢您的帮助!

0 个答案:

没有答案