在包含中指定字段

时间:2019-03-25 12:41:50

标签: sequelize.js

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

例如,假设您有一个表名称“ 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}

1 个答案:

答案 0 :(得分:1)

为关联提供别名(使用AS):

....
lea eax, [ebp+var_10]
mov [esp], eax
mov ecx, offset __imp__ZSt3cin; std::cin
call _ZNsirsERi ; std::istream::operator>>(int &)
sub esp, 4
mov eax, [ebp+var_10]
cmp eax, 8CAh
jnz loc_401645

请参考findAll中的别名:

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

尝试不使用别名-您应该会看到一条错误消息,要求您确定要使用的关联...