sequelize多个外键只包含一列

yas*_*kor 5 mysql node.js sequelize.js

我从用户表中制作了两个外键。

db.Subscription.belongsTo(db.User, {foreignKey: 'creatorId'});
db.Subscription.belongsTo(db.User, {foreignKey: 'subscriberId'});
Run Code Online (Sandbox Code Playgroud)

在搜索查询期间,我得到的subscriberId列包含而不是creatorId

Subscription.findAll({
    where: {
      subscriberId: req.decoded._id
    },
    include: [
      {
          model: User, 
          foreignKey: 'creatorId', 
          attributes: ['name', 'role', 'uid', 'imageUrl']
      }
    ]
})
Run Code Online (Sandbox Code Playgroud)

有人可以找出我在这里做错了什么。

Dyl*_*den 17

尝试为关联设置一个名称,以便 Sequelize 更好地了解要包含哪个关联。你可以做这样的事情来设置关联的名称......

db.Subscription.belongsTo(db.User, {
  as: 'creator',
  foreignKey: 'creatorId'
});

db.Subscription.belongsTo(db.User, {
  as: 'subscriber',
  foreignKey: 'subscriberId'
});
Run Code Online (Sandbox Code Playgroud)

然后您可以在查询中使用这些名称来获取特定关联,因此...

Subscription.findAll({
  include: {
    model: User,
    as: 'creator',
    attributes: ['name', 'role', 'uid', 'imageUrl']
  },
  where: {
    subscriberId: req.decoded._identer
  }
});
Run Code Online (Sandbox Code Playgroud)

当您多次关联同一个表时,设置名称有助于 ORM 确定要加载的关联。对于记录,对于返回的所有记录,您可以通过访问.creator实例上的来访问该关联。

祝你好运!:)

  • 我会加倍投票给这个答案:) (2认同)