javascript - Sequelize 包含联结表中的属性

标签 javascript node.js sequelize.js

我正在建立一家商店,我在数据库中有订单和商品。这是模型的代码:

项目:

var Sequelize = require('sequelize')
var sequelize = require('./sequelize')
var Item = sequelize.define('item', {
  image: {
    type: Sequelize.STRING,
    allowNull: false
  },
  itemName: {
    type: Sequelize.STRING,
    allowNull: false,
    field: 'item_name'
  },
  price: {
    type: Sequelize.INTEGER,
    allowNull: false
  }
})

module.exports = Item

订单:

var Sequelize = require('sequelize')
var sequelize = require('./sequelize')
var Order = sequelize.define('order', {
  orderNumber: {
    primaryKey: true,
    type: Sequelize.UUID,
    defaultValue: Sequelize.UUIDV4
  },
  shop: {
    type: Sequelize.INTEGER
  },
  location: {
    type: Sequelize.STRING
  }
})

module.exports = Order

它们通过属于许多相关:

Item.belongsToMany(Order, {through: OrderItem})
Order.belongsToMany(Item, {through: OrderItem})

OrderItem 有一个附加字段“count”,我需要返回它:

var Sequelize = require('sequelize')
var sequelize = require('./sequelize')

var OrderItem = sequelize.define('OrderItem', {
  count: Sequelize.INTEGER
})

module.exports = OrderItem

但是,当我尝试包含 OrderItem 模型时,它不起作用。没有错误,什么都没有。查询只是不返回:

Order.findAll({
      where: {
        userId: userId
      },
      include: [{
        model: Item,
        include: [OrderItem]
      }]
    }).then(orders => {
      console.log(orders)
      res.status(200).json(orders)
    })

如何从sequeilize中得到我需要的东西?

最佳答案

你可以尝试这样的事情:

  Order.findAll({
      where: {
        userId: userId
      },
      include: [{ model: Item, 
        as:'item', 
        through:{attributes:['count']} // this may not be needed
      }]
  }).then(orders => {
    console.log(orders)
    res.status(200).json(orders)
  })

此外,您的模型必须具有正确的命名策略。例如。 :

Item - 必须有 itemId 字段而不是 itemNumber, 订单 - 必须将 orderId 作为主要字段

OrderItem 的结构:

var OrderItem = sequelize.define('OrderItem', {
  orderId: Sequelize.INTEGER,
  itemId: Sequelize.INTEGER,
  count: Sequelize.INTEGER
})

另一种是在使用 belongsToMany() 时直接使用相关字段和模型的名称

更多信息:http://docs.sequelizejs.com/en/latest/docs/associations/

关于javascript - Sequelize 包含联结表中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34483086/

相关文章:

javascript - 如何使用 Formik 动态生成列表(例如通过 AJAX 或 setState)?

node.js - 更改 NginX 位置 block 时 Express 应用程序无法获取静态内容

node.js - 调度 mqtt 发布

sequelize.js - 记录 Sequelize 迁移

node.js - 使用ES6模板字符串查询sql数据库

node.js - 重构后,Sequelize 不会读取新的模型名称(删除最终模型名称中的 s)

javascript - 使用纯Javascript Ajax从本地获取json数据

javascript - 使用 for 循环创建多个 div

javascript - 按字母顺序对数组排序 - Angularjs

node.js - meteor 主机上的 meteor 部署错误