当前位置: 首页 > 面试题库 >

从sequelize.js中的关联模型加载属性

何和惬
2023-03-14
问题内容

我有两个模型。用户和管理员

用户模型

 const UserMaster = sequelize.define('User', {
        UserId: {
            type: DataTypes.BIGINT,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        RelationshipId: {
            type: DataTypes.STRING,
            allowNull: true,
            foreignKey: true
        },
        UserName: {
            type: DataTypes.STRING,
            allowNull: true
        }
    })

经理模式

 const Manager = sequelize.define('Manager', {
        ManagerId: {
            type: DataTypes.BIGINT,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        RelationshipId: {
            type: DataTypes.STRING,
            allowNull: true,
            foreignKey: true
        },
        MangerName: {
            type: DataTypes.STRING,
            allowNull: true
        }
    })

缩小模型以简单地解决问题

协会..

User.belongsTo(models.Manager, {
    foreignKey: 'RelationshipId',
    as: 'RM'
});

Manger.hasMany(model.User, {
    foreignKey: 'RelationshipId',
    as: "Users"
})

因此,在user.findAll()上

var userObject = models.User.findAll({
    include: [{
        model: models.Manager,
        required: false,
        as: 'RM',
        attributes: ['ManagerName']
    }]
});

我得到以下内容。

userObject = [{
        UserId: 1,
        RelationshipId: 4545,
        UserName: 'Jon',
        RM: {
            ManagerName: 'Sam'
        }
    },
    {
        UserId: 2,
        RelationshipId: 432,
        UserName: 'Jack',
        RM: {
            ManagerName: 'Phil'
        }
    },
    ...
]

如何将’ManagerName’属性从Manager模型(关联为RM)移动到UserObject?是否可以以某种方式从急切加载的模型中加载属性,而无需将它们嵌套在单独的对象下?我希望得到的对象看起来像对象

预期对象-

userObject = [{
        UserId: 1,
        RelationshipId: 4545,
        UserName: 'Jon',
        ManagerName: 'Sam' // <-- from Manager model
    },
    {
        UserId: 2,
        RelationshipId: 432,
        UserName: 'Jack',
        ManagerName: 'Phil' // <-- from Manager model
    },
    ...
]

谢谢你。


问题答案:

raw: trueattributesoption一起添加可以得到所需的对象格式

所以,

var userObject = models.User.findAll({
raw:true,
attributes: {
include: [Sequelize.col('RM.ManagerName'), 'ManagerName']
},
    include: [{
        model: models.Manager,
        required: false,
        as: 'RM',
        attributes: []
    }]
});


 类似资料:
  • 问题内容: 是否可以一次更新父模型和关联模型的属性?我无法使其正常工作,并且无法找到任何完整的示例。我不确定我的代码是否有问题或是否没有按照我期望的方式工作。我尝试将onUpdate:’cascade’添加到我的hasMany定义中,但这似乎无济于事。 楷模: 检索过滤器并尝试更新关联的FilteredContent对象上的属性: 这导致仅Filter对象中的属性被更新。如何获取它还更新Filte

  • 通过预先确定好模型之间的关系,在业务开发中,使用非常简便的写法,就可以实现复杂的涉及多表数据增删改查。 这一切都是模型底层实现帮你在处理,在 imi 中,模型的关联关系都使用注解来定义。 注解 这里列出定义模型关联关系所需的注解,所有关联模型的注解,命名空间为Imi\Model\Annotation\Relation @OneToOne 一对一关系声明 用法: @OneToOne("模型类名")

  • Creating model relations(创建模型之间的关系) model 关系概念 使用slc loopback:relation 关联选项 范围 属性 invertProperties ?? 逆属性(?) 自定义范围方法 通过REST API 暴露关联对象的方法 model 关系概念 在工作中单个 model 比较好理解, 但是现实使用中 model 之间往往存在着各种关联。 当你在实

  • 我有一个画布,其中包含带有的对象和带有的其他对象。当我将此画布转换为JSON并重新加载时。这些对象具有默认属性。即没有居中旋转,对象是可选择的。我可以知道为什么会发生这种情况吗?很明显,像centeredRotation、可选这样的属性不包含在JSON中。 {“type”:“rect”,“originX”:“左”,“originY”:“顶部”,“左”:92,“顶部”:53,“宽度”:150,“高度

  • 本文向大家介绍ThinkPHP中的关联模型注意点,包括了ThinkPHP中的关联模型注意点的使用技巧和注意事项,需要的朋友参考一下 初学ThinkPHP时,ThinkPHP中的关联模型有一处易错点,现举例如下: 需用到的表:id_elite_major和id_elite_student 代码举例如下:

  • 本文向大家介绍JavaScript中关联原型链属性特性,包括了JavaScript中关联原型链属性特性的使用技巧和注意事项,需要的朋友参考一下 数据属性: 数据属性包含一个数据值的位置,在这个位置可以读取和写入值。 4个描述的行为特性: writable 表示能否修改属性的值。默认为true Enumerable 表示能否过过for in循环返回属性是否可以枚举。 configuralbe 表示是