美文网首页
egg-sequelize关联查询两种方法

egg-sequelize关联查询两种方法

作者: 随风飞2019 | 来源:发表于2020-07-12 23:40 被阅读0次

两张表,博客(blog_content)和分类(blog_type)
blog_content表,包含id,title,content,type_id字段,其中type_id指向blog_type表中的id
blog_type表,包含id,type_name字段
想要查询博客列表时,查询到分类名字

定义模型如下:

//blog模型
module.exports = (app) => {
    const { STRING, INTEGER,DATE,Now } = app.Sequelize;
    const Blog = app.model.define(
      "blog",
      {
        id: {
          type: INTEGER,
          primaryKey: true,
          autoIncrement: true,
        },
        title:STRING,
        content: STRING,
        type_id:INTEGER,
      },
      {
        timestamps: false,
        freezeTableName: true,
        tableName: "blog_content"
      }
    );
    return Blog;
  };

//type模型
module.exports = (app) => {
    const { STRING, INTEGER } = app.Sequelize;
    const Type = app.model.define(
      "type",
      {
        id: {
          type: INTEGER,
          primaryKey: true,
          autoIncrement: true,
        },
        type_name:STRING,
      },
      {
        timestamps: false,
        freezeTableName: true,
        tableName: "blog_type"
      }
    );
    return Type;
  };

1.第一种查询方式,在service里面定义关联方式,然后直接查询,如下

const Service = require('egg').Service;
class BlogService extends Service {
    async list() {
        let blogModel = this.ctx.model.Blog;
        let typeModel = this.ctx.model.Type;
//下面是重点,blogModel的type_id,指向typeModel的id
        blogModel.belongsTo(typeModel, {
            foreginkey: "type_id",
            targetkey: "id",
        })
        let result = await blogModel.findAll({
            include: [{ model: typeModel, attributes: ['type_name'] }]
        })
        return result
    }
}
module.exports = BlogService;

2.第二种,在模型里直接定义属于关系,查询时候直接查询,如下

//修改blog模型,在return Blog之前加上如下方法
Blog.associate = function() {
      app.model.Blog.belongsTo(app.model.Type, { foreignKey: 'type_id', targetKey: 'id'})
}

//service 查询方式也简化如下
async list() {
        let result = await this.ctx.model.Blog.findAll({
            include: [{ model: this.ctx.model.Type, attributes: ['type_name'] }]
        })
        return result
}

相关文章

  • egg-sequelize关联查询两种方法

    两张表,博客(blog_content)和分类(blog_type)blog_content表,包含id,titl...

  • MyBatis 最佳实践篇 3:关联查询懒加载

    MyBatis 中联合查询可分为关联查询和关联结果两种方式(具体查看 Mybatis 文档篇 3.5:Mapper...

  • mongo数据结构设计

    两种关系设计方式 内嵌:只做查询使用,避免返回数据时关联查询或多次查询 引用:关联的集合涉及到附加信息(被引用的文...

  • Maven项目集成Mybatis 一对多、多对一 查询嵌套&结

    MyBatis在映射文件中加载关联对象的关系主要通过两种方式:查询嵌套、结果嵌套查询嵌套:类似于子查询,它需要执行...

  • Spring Data JPA进阶

    Spring Data JPA进阶 目录 ddl属性配置 通过解析方法名查询 关联查询 spring.jpa.pr...

  • MyBatis一对多查询及延迟加载

    一对一查询 需求 查询所有订单信息,关联查询下单用户信息。 SQL 主信息:订单信息从信息:用户信息 方法 方法一...

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

  • 关联关系查询(第一讲)

    关联查询 当查询内容涉及到具有关联关系的多个表时,就需要使用关联查询。根据表与表之间的关联关系的不同,关联查询分为...

  • 关于关联查询的处理

    mybatis关联查询配置有2种:关联嵌套结果,关联嵌套查询关联的查询过程中如果关联的表可能查到很多数据,应该考虑...

  • MySQL的多表关联查询

    一、多表关联查询 多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是...

网友评论

      本文标题:egg-sequelize关联查询两种方法

      本文链接:https://www.haomeiwen.com/subject/vmlocktx.html