Sequelize 从 belongsTo 关系中获取值
Posted
技术标签:
【中文标题】Sequelize 从 belongsTo 关系中获取值【英文标题】:Sequelize get values from belongsTo relationship 【发布时间】:2017-06-08 13:30:24 【问题描述】:我正在使用 mysql 中的现有数据库创建应用程序。 我可以从表中检索值,但是当我尝试从关联模型中检索值时,不起作用。
采购订单模型:
"use strict";
module.exports = (sequelize, DataTypes) =>
var PurchaseOrder = sequelize.define('purchase_orders' ,
id:
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
,
purchaseDate:
type: DataTypes.DATE,
allowNull: true,
field: 'purchase_date'
,
supplierId:
type: DataTypes.INTEGER(11),
allowNull: true,
// references:
// model: 'suppliers',
// key: 'id'
// ,
field: 'supplier_id'
,
requestedById:
type: DataTypes.INTEGER(11),
allowNull: true,
field: 'requested_by_id'
,
masterPurchaseOrderId:
type: DataTypes.INTEGER(11),
allowNull: true,
// references:
// model: 'master_purchase_orders',
// key: 'id'
// ,
field: 'master_purchase_order_id'
,
createdAt:
type: DataTypes.DATE,
allowNull: false,
field: 'created_at'
,
updatedAt:
type: DataTypes.DATE,
allowNull: false,
field: 'updated_at'
,
classMethods:
associate: (models) =>
PurchaseOrder.belongsTo(models.masterPurchaseOrders,
foreignkey: 'master_purchase_order_id'
);
,
associate: (models) =>
PurchaseOrder.belongsTo(models.supplier,
foreignkey: 'supplier_id'
);
,
,
,
timestamps: true,
paranoid: false,
underscored: true,
freezeTableName: true,
tableName: 'purchase_orders'
);
return PurchaseOrder;
采购订单控制器:
"using strict";
const purchaseOrder = require('../models/').purchase_orders;
const Supplier = require('../models/').supplier;
const Master = require('../models/').masterPurchaseOrders;
module.exports=
index(req, res)
purchaseOrder
.findAll(
include:[Supplier, Master]
)
.then((masters) =>
res.status(200).json(masters);
)
.catch((error) =>
res.status(500).json(error);
);
,
create(req, res)
purchaseOrder
.create(req.body)
.then( master =>
res.status(200).json(master);
)
.catch( error =>
res.status(500).json(error);
);
,
;
如果我只在函数 findall() 中包含模型供应商。我从采购中获取数据,从供应商处获取数据。 但是当我包括模型主采购订单时。我得到一个空的 json。
【问题讨论】:
【参考方案1】:你能做到以下几点
purchaseOrder
.findAll(
include:[model: Supplier, required:true, model: Master, required : false]
)
【讨论】:
【参考方案2】:这是因为你覆盖了classMethods
的associate
属性,只会执行第二个associate()
函数。
您应该将两个关联定义移到一个函数中:
classMethods:
associate: (models) =>
PurchaseOrder.belongsTo(models.masterPurchaseOrders,
foreignkey: 'master_purchase_order_id'
);
PurchaseOrder.belongsTo(models.supplier,
foreignkey: 'supplier_id'
);
,
,
【讨论】:
您能告诉我如何获取具有子关系的对象吗?因为我正在使用具有 hasMany 关系但仅重试父表的单个对象并且没有得到任何关系的父模型的 findOne 方法。以上是关于Sequelize 从 belongsTo 关系中获取值的主要内容,如果未能解决你的问题,请参考以下文章
Sequelize ORM中HasOne和BelongsTo的区别
Sequelize hasMany工作正常,但反比关系不正常
Sequelize.hasMany/belongsTo中的foreignKey是啥意思?
Apollo,Sequelize - 简单的 `belongsTo` 关联返回 null