Sequelize 表关联

一对一: belongsTo
一对多: hasMany

  Adbook.associate = function () {
    // 一对多 { foreignKey: 别的表 '使用什么字段关联'。 targetKey  (自己表)  ‘只能对自己表ID 参数’}

    app.model.Adbook.hasMany(app.model.Adswiper, {
      as: 'swiperlist',
      foreignKey: 'mid'
    })
    /**
     * User.belongsTo(关联的模型, { foreignKey:自己表 '使用什么字段关联', targetKey: 别的表'与关联的模型那个字段关联', as: '别名' });
     */
    // 一对一
    // app.model.Adbook.belongsTo(app.model.Adswiper, {
    //   foreignKey: 'mid',
    //   targetKey: 'id',
    //   as: 'swiperlist'
    // })
  }

查询方法

  const result = await ctx.model.Adbook.findAndCountAll({
      limit: toInt(limit),
      offset: toInt((+currentPage - 1) * +limit),
      include: [
        {
          model: Adswiper,
          as: 'swiperlist',
          attributes: ['data']
        }
      ],
      distinct: true
    })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sequelize 是一个 Node.js ORM(Object-Relational Mapping) 框架,可以方便地进行数据库操作。在 Sequelize 中,关联查询可以通过定义模型之间的关系来实现。下面是一个示例: 假设我们有两个模型:用户(User)和订单(Order),用户和订单之间是一对多的关系,即一个用户可以有多个订单。我们可以通过以下方式定义它们之间的关系: ```javascript // User 模型 const User = sequelize.define('user', { name: DataTypes.STRING, age: DataTypes.INTEGER, }); // Order 模型 const Order = sequelize.define('order', { amount: DataTypes.FLOAT, }); // 关联关系 User.hasMany(Order); Order.belongsTo(User); ``` 上述代码中,我们通过 `hasMany` 和 `belongsTo` 方法来定义用户和订单之间的关系。 接下来,我们可以使用 `include` 方法来进行关联查询: ```javascript User.findOne({ where: { id: 1 }, include: Order, }).then(user => { console.log(user.orders); // 打印该用户的所有订单 }); ``` 上述代码中,我们使用 `findOne` 方法查询 id 为 1 的用户,并通过 `include` 方法将该用户的所有订单一起查询出来。在查询结果中,用户对象上会有一个 `orders` 属性,该属性对应该用户的所有订单。 如果我们想在查询结果中包含订单的详细信息,可以进一步嵌套 `include` 方法: ```javascript User.findOne({ where: { id: 1 }, include: { model: Order, include: [Product], }, }).then(user => { console.log(user.orders[0].product); // 打印该用户的第一个订单的商品信息 }); ``` 上述代码中,我们通过嵌套 `include` 方法将订单和商品关联起来。在查询结果中,订单对象上会有一个 `product` 属性,该属性对应该订单所对应的商品信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值