【问题标题】:Specify field in an include在包含中指定字段
【发布时间】:2019-03-25 23:00:24
【问题描述】:

当一个表在多个字段上与另一个表关联时,如何指定要在包含数组中使用哪个字段?

例如,假设您有一个名为“Review”的表,其中包含“CreatedBy”、“UpdatedBy”和“DeletedBy”列。

该表有 3 个关联,每个“xxxxBy”字段一个关联,并且都指向“User”表。

现在,您想查询由特定用户创建的所有评论,您将如何使用 Sequelize 来做到这一点?

 const Review = sequelize.define('Review', {
        id: {
            allowNull: false,
            primaryKey: true,
            type: DataTypes.UUID
        },
        text: {
            type: DataTypes.String,
            allowNull: false,
        },      
        createdBy: {
            type: DataTypes.UUID,
            allowNull: false,
        },
        updatedBy: {
            type: DataTypes.UUID,
            allowNull: false,
        },
        deletedBy: {
            type: DataTypes.UUID,
        },

    }, {});


 const User = sequelize.define('User', {
        id: {
            allowNull: false,
            primaryKey: true,
            type: DataTypes.UUID
        },
        name: {
            type: DataTypes.String,
            allowNull: false,
        },  
    }, {});


Review.belongsTo(User, { foreignKey: 'createdBy' });
Review.belongsTo(User, { foreignKey: 'updatedBy' });
Review.belongsTo(User, { foreignKey: 'deletedBy' });

如果只有一个字段指向“用户”,我会做的查询。

Review.findAll({
   include:[{
      required: true,
      model: User,
      where: {
         name: 'xxx'
      }
   }] 
});

你如何指定连接是在“createdBy”上完成的?

我想我可以使用以下内容,但我希望有一种方法可以只说“on: 'createdBy'”或“onField: 'createdBy”等...

include.on: {Review.createdBy: User.id}

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    给关联一个别名(使用 AS):

    Review.belongsTo(User, { as: 'joinCreatedBy', foreignKey: 'createdBy'});
    

    参考 findAll 中的别名:

      Review.findAll({    
            include: [
            {
                model: User,
                as: 'joinCreatedBy'
            }]
      ....
    

    试一试没有别名 - 您应该会看到一个错误,要求您确定要使用的关联...

    【讨论】:

    • 男人的感觉!我会尝试,但我觉得这是正确的方法,所以我将您的回复设置为接受的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2019-06-25
    相关资源
    最近更新 更多