首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >节点JS Sequelize join查询

节点JS Sequelize join查询
EN

Stack Overflow用户
提问于 2020-06-03 17:03:13
回答 1查看 68关注 0票数 0

我对续集是个新手,就像我今天刚学到的一样。我甚至不知道如何在它上面问一个问题,所以请让我知道我如何才能改进这一点。我有下面的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
router.get('/:id/work', async (req, res) => {
    let results = await User.findAll(
        {
            where: {
                id: req.params.id
            },
            include: [Task, Project]
        }
    );
    res.status(200);
    res.send(results);
});

我想要获取用户信息,并将'tasks‘和'projects’作为'assigner‘和'project_id’属性的数组。“我的项目”和“任务”模型都将这些列作为外键。我得到的结果如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  id: 5,
  email: "asd@asdads.com",
  name: "asdasdasd",
  surname: "asdasdasdasd1231",
Task: {
  id: 9,
  name: "req.body.name",
  description: "req.body.description",
  score: 1,
  status: "req.body.status",
  assigner: 5,
  project_id: null
},
Project: {
  id: 2,
  name: "req.body.name",
  body: "req.body.body",
  status: null,
  assigner: 5
 }
},
 {
  id: 5,
  email: "asd@asdads.com",
  name: "asdasdasd",
  surname: "asdasdasdasd1231",
 Task: {
  id: 9,
  name: "req.body.name",
  description: "req.body.description",
  score: 1,
  status: "req.body.status",
  assigner: 5,
  project_id: null
 },
Project: {
  id: 3,
  name: "req.body.name",
  body: "req.body.body",
  status: "req.body.status",
  assigner: 5
 }
},

有什么快速的方法可以做到这一点吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  id: 5,
  email: "asd@asdads.com",
  name: "asdasdasd",
  surname: "asdasdasdasd1231",
  Task: [/*all task objects*/],
  Project: [/*all project objects*/]
}

模型定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const User = db.define('User', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    email: Sequelize.STRING,
    name: Sequelize.STRING,
    surname: Sequelize.STRING,
}, {
    timestamps: false,
    tableName: 'users'
})

/**
 * Model Relations
 */

Project.belongsTo(User, { foreignKey: 'assigner' })
User.hasOne(Project, { foreignKey: 'assigner' })

Task.belongsTo(User, { foreignKey: 'assigner' })
User.hasOne(Task, { foreignKey: 'assigner' })

Task.belongsTo(Project, { foreignKey: 'project_id' })

export default User;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Task = db.define('Task', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    name: Sequelize.STRING,
    description: Sequelize.TEXT,
    score: Sequelize.INTEGER,
    status: Sequelize.STRING,
    assigner: {
        type: Sequelize.INTEGER,
        references: {
            model: User,
            key: 'id'
        }
    },
    project_id: {
        type: Sequelize.INTEGER,
        references: {
            model: Project,
            key: 'id'
        }
    }
}, {
    timestamps: false,
    tableName: 'tasks'
})


export default Task;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Project = db.define('Project', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    name: Sequelize.STRING,
    body: Sequelize.STRING,
    status: Sequelize.STRING,
    assigner: {
        type: Sequelize.INTEGER,
        references: {
            model: User,
            key: 'id'
        }
    }
}, {
    timestamps: false,
    tableName: 'projects'
})

export default Project;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-03 18:59:54

将关联定义从hasOne更改为hasMany,因为我看到许多项目可以链接到一个用户和任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
User.hasMany(Project, { foreignKey: 'assigner' })
User.hasMany(Task, { foreignKey: 'assigner' })
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62178517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文