sequelize:如何在include中使用scope?

tquggr8v  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(389)

我想问一下是否有可能在里面使用关联模型的范围 include 选择?
在我看来,有两种模式, User 以及 Code :

const ACTIVE_FIELDS = ['fullname', 'idCard']
const User = sequelize.define('User', {
  uid: DataTypes.STRING,
  fullname: DataTypes.TEXT,
  idCard: DataTypes.STRING,
  province: DataTypes.STRING,
}, {
  scopes: {
    activated: {
      where: ACTIVE_FIELDS.reduce((condition, field) => {
        condition[field] = {[sequelize.Op.ne]: null}
        return condition
      }, {}),
    },
    inProvinces: (provinces) => ({
      where: {
        province: {
          [sequelize.Op.in]: provinces,
        },
      },
    }),
  },
})

const Code = sequelize.define('Code', {
  id: {
    type: DataTypes.STRING,
    primaryKey: true,
  },
  uid: DataTypes.STRING,
}, {});
``` `Code` 属于 `User` 通过 `uid` ```
Code.belongsTo(User, {
  foreignKey: 'uid',
  targetKey: 'uid',
  as: 'user',
})

我想随机选一个 Code 在特定省份激活的用户。有什么方法可以重复使用吗 activated 以及 inProvinces 范围,使其看起来像:

const randomCode = (provinces) =>
  Code.findOne({
    include: [{
      model: User,
      as: 'user',
      scopes: ['activated', {method: ['inProvinces', provinces]}],
      attributes: [],
      required: true,
    }],
    order: sequelize.random(),
  })
eh57zj3b

eh57zj3b1#

尝试将范围附加到实际模型。。。。它对我有用。

Code.findOne({
  include: [{
    model: User.unscoped() 
  }],
})

@eee更新-更清楚地说:

Code.findOne({
  include: [{
    model: User.scope('activated', {method: ['inProvinces', provinces]}) 
  }],
})

我想这应该管用。。。

相关问题