【问题标题】:Sequelize Populate Relation Query Either TableSequelize 填充关系查询任一表
【发布时间】:2018-04-21 19:45:26
【问题描述】:

我在 Sequelize 中有以下两个表

const Tokens = sequelize.define("Tokens", {
    id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true
    },
    active: {
        type: DataTypes.BOOLEAN
    }
});

const User = sequelize.define("Users", {
    id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true
    },
    first_name: {
        type: DataTypes.STRING
    }
});

User.associate = models => {
    models["Users"].hasMany(models["Tokens"], {foreignKey: 'userID', as: 'tokens_userid'});
};

我正在尝试在 Sequelize 中运行以下查询。

const token = await db.Tokens.findOne({
    where: {
        id,
        active: true
    },
    include: ["tokens_userid"]
});

但我收到以下错误。

Error: Association with alias "tokens_userid" does not exists

我的主要目标是根据令牌 ID 获取用户。现在我只需将该关联移至 User 表,但稍后我将希望获取给定用户 ID 的所有令牌。所以无论如何我都会遇到这个问题。

我尝试添加以下行,但它抱怨循环关系或类似的东西。

models["Tokens"].hasOne(models["User"], {foreignKey: 'userID', as: 'tokens_userid'});

如何查询 Users 或 Tokens 表并让它正确填充关系?

【问题讨论】:

    标签: javascript mysql node.js sequelize.js


    【解决方案1】:

    我可以通过在我的表格中添加以下行来解决这个问题。

    models["Tokens"].belongsTo(models["User"], {foreignKey: 'userID', as: 'tokens_userid_from_token'});
    

    基本上是我之前尝试过的,但将hasOne 更改为belongsTo

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多