Sequelize实现一对多关联
模型一
const Sequelize = require('sequelize')
const moment = require('moment')
const sequelize = require('./init')
const tools = require('../utils/tools')
const CargoOrderModel=require('./orderDetail')
// 定义表的模型
const CargoOrderCommonModel = sequelize.define('export_cargo_order_common', {
id: {
type: Sequelize.STRING(36),
primaryKey: true,
autoIncrement: true
},
user_id: {
type: Sequelize.STRING(32),
},
order_type: {
type: Sequelize.STRING(32)
},
order_no: {
type: Sequelize.STRING(32)
},
status: {
type: Sequelize.TINYINT(4),
defaultValue: 0
},
update_time: {
type: Sequelize.DATE,
get() {
return this.getDataValue('update_time') ? moment(this.getDataValue('update_time')).format('YYYY-MM-DD HH:mm:ss') : null
}
},
create_time: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW,
get() {
return moment(this.getDataValue('create_time')).format('YYYY-MM-DD HH:mm:ss')
}
}
},
{
// 告诉 sequelize 不需要自动将表名变成复数
freezeTableName: true,
// 自定义表名
// tableName: 'student',
// 不需要自动创建 createAt / updateAt 这两个字段
timestamps: false,
/* // 指定索引
indexes: [
{
// 索引名称
name: 'idx_age',
// 索引字段名称
fields: ['age'],
}
] */
});
CargoOrderCommonModel.hasMany(CargoOrderModel, {
foreignKey: 'order_no',
sourceKey: 'order_no'
})
//CargoOrderModel.belongsTo(CargoOrderCommonModel);
module.exports = CargoOrderCommonModel
模型二
const Sequelize = require('sequelize')
const moment = require('moment')
const sequelize = require('./init')
const tools = require('../utils/tools')
// 定义表的模型
const CargoOrderModel = sequelize.define('detail', {
order_no: {
type: Sequelize.STRING(32)
},
cupboard: {
type: Sequelize.STRING(32)
},
cupboard_num: {
type: Sequelize.STRING(4),
defaultValue: 0
},
},
{
// 告诉 sequelize 不需要自动将表名变成复数
freezeTableName: true,
// 自定义表名
tableName: 'export_cargo_order',
// 不需要自动创建 createAt / updateAt 这两个字段
timestamps: false,
/* // 指定索引
indexes: [
{
// 索引名称
name: 'idx_age',
// 索引字段名称
fields: ['age'],
}
] */
});
module.exports = CargoOrderModel
router
const express = require('express')
const router = express.Router()
const OrderController = require('../controller/order');
const orderController = new OrderController();
router.post("/list", orderController.getOrderList)
controller
const express = require('express');
const OrderService = require('../service/order');
const orderService = new OrderService();
const Sequelize = require('sequelize')
const Op = Sequelize.Op
class OrderController {
async getOrderList(req, res) {
let where = {}
if (req.body.pick_up_time_begin && req.body.pick_up_time_end) {
where = {
pick_up_time: {
[Op.between]: [req.body.pick_up_time_begin,req.body.pick_up_time_end]
}
}
}
const resp = await orderService.getOrderList(where, function (callback) {
for (var i=0;i<callback.length;i++)
{
let cupboard='';
//console.log(callback[i].dataValues)
for (var j=0;j<callback[i].dataValues.details.length;j++){
cupboard+=callback[i].dataValues.details[j].cupboard+"*"+callback[i].dataValues.details[j].cupboard_num+'\r\n'
}
callback[i].dataValues.cupboards=cupboard
}
res.send({
code: 200,
msg: "请求数据成功",
data: callback
})
})
}
}
module.exports = OrderController;
service
const CargoOrderCommonModel = require('../model/order')
const CargoOrderModel=require('../model/orderDetail')
class OrderService {
async getOrderList(where,callback) {
CargoOrderCommonModel.findAndCountAll({
//offset,
//limit: parseInt(req.query.limit) || 20,
include: [
{
model: CargoOrderModel,
attributes: ['cupboard','cupboard_num']
}
],
where: where,
order: [['create_time', 'DESC']]
}).then(function(result) {
callback(result.rows)
return
})
}
}
module.exports = OrderService;
查询结果
{
"code": 20000,
"message": "获取成功",
"data": {
"record": [
{
"update_time": "2022-06-07 10:09:29",
"create_time": "2022-06-07 10:09:29",
"id": "1654567769000000257",
"user_id": "20",
"order_type": "铁路订单",
"order_no": "92022060710092975210",
"status": 1,
"details": [
{
"cupboard": "20GP",
"cupboard_num": "15"
},
{
"cupboard": "",
"cupboard_num": "0"
},
{
"cupboard": "40GP",
"cupboard_num": "3"
}
]
}
],
"total": 1
}
}

