【问题标题】:Sequelize - Include based on specific attributeSequelize - 根据特定属性包含
【发布时间】:2021-03-05 09:15:39
【问题描述】:

我有一个模型定义如下:

sequelize.define('game', {
    id: {
        type: type.INTEGER,
        primaryKey: true,
        autoIncrement: true,
    },
    leaderId: {
        type: type.INTEGER,
        allowNull: false,
        references: {
            model: 'users',
            key: 'id',
        },
    },
    playerId: {
        type: type.INTEGER,
        allowNull: false,
        references: {
            model: 'users',
            key: 'id',
        },
    },
    status: {
        type: type.STRING,
        defaultValue: 'running',
    },
    notes: {
        type: type.TEXT,
    },
});

我正在尝试使用 Sequelize 加载所有 game 对象并包含 ID 等于 playerId 字段的 User

问题是我有两个属性(leaderIdplayerId)引用User 模型,所以使用include 如下不起作用:

Game.findAll({
    where: conditions,
    include: [{ model: User }],
})

有没有办法指定include 命令应该使用哪个属性?

【问题讨论】:

    标签: javascript sql node.js postgresql sequelize.js


    【解决方案1】:
    const game = sequelize.define('game', {
        id: {
            type: type.INTEGER,
            primaryKey: true,
            autoIncrement: true,
        },
        leaderId: {
            type: type.INTEGER,
            allowNull: false,
            references: {
                model: 'users',
                key: 'id',
            },
        },
        playerId: {
            type: type.INTEGER,
            allowNull: false,
            references: {
                model: 'users',
                key: 'id',
            },
            as:'player'
        },
        status: {
            type: type.STRING,
            defaultValue: 'running',
        },
        notes: {
            type: type.TEXT,
        },
    });
    
    game.associate = function (models) {
       game.belongsTo(models.user, {
          foreignKey: "playerId",
          as: "player",
       });
    
       game.belongsTo(models.user, {
          foreignKey: "leaderId",
          as: "leader",
       });
    };
    
    
    Game.findAll({
        where: conditions,
        include: ['player'],
    })
    
    Or
    
    Game.findAll({
        where: conditions,
        include: [{model: User, as: 'player' }],
    })
    
    Or
    
    Game.findAll({
        where: conditions,
        include: [{model: User, as: 'player', foreignKey: 'playerId' }],
    })
    

    https://github.com/nkhs/node-sequelize

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      相关资源
      最近更新 更多