【问题标题】:How to get associated elements in Sequelize for specific case如何在 Sequelize 中获取特定案例的关联元素
【发布时间】:2021-02-18 21:02:37
【问题描述】:

我有用户、项目和任务的模型

Users 和 Tasks 有关联多对多

Projects 和 Tasks 有一对多的关联(每个 Project 有很多 Tasks)

当接收指定用户的任务时,我想为每个任务获取关联的项目。

任何人都可以帮助找到解决方法。

我的代码如下:

        // receiving of user from database
        const user = await User.findOne({where: {id: request.userId}})
        
        // receiving of tasks related to user
        const tasks = await user.getTasks(
        
                // here i've tried to add following code, but it does not works
                include: { model: Project, as: 'project' }

        )
        
        response.status(201).json( tasks )

任何帮助将不胜感激

【问题讨论】:

  • 嘿伙计,你看过 Sequelize 中的 belongsTo() 和 belongsTomany() 属性了吗? sequelize.org/master/manual/assocs.html
  • 是的,当然。我没有找到我的问题的答案。能否请您提供更详细的建议
  • 为什么要先查询用户?是否可以直接查询带有where条件的任务,也可以包含项目详情?
  • 是的,我试过这样做,但是,我不明白如何获取属于指定用户的任务(关联通过单独的表 usertasks 制作)。不可能使用例如 {where: {id: request.userId}} 来查找任务

标签: mysql node.js sequelize.js


【解决方案1】:

在 Sequelize 中,处理“许多”关联时,可能会有所不同。你说你已经有了这个关联:

项目模型

Project.hasMany(Task)

现在您需要在 Task.model 中实现另一种方式:

Task.belongsTo(Project);

Sequelize Documentation 你会发现这个:

要创建一对多关系,hasMany 和 belongsTo 关联一起使用;

【讨论】:

    【解决方案2】:

    我已经解决了问题。正确的代码如下。

    
            const user = await User.findByPk( request.userId )
            
            if(!user) return
        
            const tasks = await user.getTasks(
                { include: [
                    { model: Project, as: 'project' }
                ] }
            )
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2014-10-23
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多