egg.js两个表相互关联怎么写

Posted 周小姐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了egg.js两个表相互关联怎么写相关的知识,希望对你有一定的参考价值。

有两个表,第一个接口:如果a表是主表,需要连接多个表,其中有个是b表,另一个接口,b表是主表,需要连接多个,其中有个是a表,那么这时候在model里面不需要做2次关联,直接1次关联,然后直接在service里面的include去用这个关联名字就可以了,例如:
在HxUserBaseInfo表里面

this.belongsTo(app.model.HxUser, { foreignKey: ‘userId‘, targetKey: ‘userId‘, as: ‘basic‘ })

在HxUser表里面

this.hasOne(app.model.HxUserBaseInfo, { foreignKey: ‘userId‘, sourceKey: ‘userId‘, as: ‘basic‘ })

HxUserBaseInfo为主表的时候

async baseInfoById(userId) {
    const { rows } = await this.ctx.model.xxxxxxx.findAndCountAll({
      attributes: { exclude: [ ‘createdAt‘, ‘updatedAt‘ ] },
      where: {
        userId,
      },
      include: [
        {
          model: this.app.model.HxUser,
          as: ‘basic‘,
        },
      ],
    })
    return { list: rows }
  }
}

HxUser为主表的时候

 async userList({ limit, offset, userName = ‘‘, time, ...params }) {
    const { Op } = this.app.Sequelize
    const { rows, count } = await this.ctx.model.HxUser.findAndCountAll({
      attributes: { exclude: [ ‘createdAt‘, ‘updatedAt‘ ] },
      distinct: true,
      where: {
        ...time,
        ...params,
      },
      // 如果没有设置required: false的话 是inner 连接,如果设置了就是左连接
      include: [{
        model: this.app.model.HxUserBaseInfo,
        as: ‘basic‘,
        attributes: [ ‘userAvator‘, ‘userName‘, ‘gender‘ ],
        required: !!userName,
        where: {
          userName: {
            [Op.like]: `%${userName}%`,
          },
        },
      },
      ],
      offset,
      limit,
    })
    return { list: rows, total: count }
  }

以上是关于egg.js两个表相互关联怎么写的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE中如果两个字段如果能关联的语句怎么写

多表关联UPDATE语句怎么写呀?

sql 查询 怎么样关联两个数据库的两个表

Oracle中,多表关联删除该怎么写?

egg.js连接数据库 sequlize动态创建表

egg.js连接数据库 sequlize动态创建表