Dears我有模型订单与OrderHasWarranty模型
的关联所以OrderHasWarranty有2个外键,我需要Sequelize检查这些外键的include(不使用where条件)
所以我在订单模型中使用了以下关联
Order.hasOne(models.OrderHasWarranty,{foreignKey:"orderId"});
Order.hasOne(models.OrderHasWarranty,{foreignKey:"warrantyFromOrderId"});
原始查询给我:
LEFT OUTER JOIN `order_has_warranties` AS `OrderHasWarranty`
ON `Order`.`id` = `OrderHasWarranty`.`warrantyFromOrderId`
WHERE `Order`.`id` = '25459';
基本上我需要的是使用关联转换下面的查询
LEFT OUTER JOIN `order_has_warranties`
AS `OrderHasWarranty` ON `Order`.`id` = `OrderHasWarranty`.`warrantyFromOrderId`
OR `Order`.`id` = `OrderHasWarranty`.`orderId` WHERE `Order`.`id` = '25459';
所以我需要在关联中使用OR条件,我尝试使用hasMany但没有运气
谢谢
答案 0 :(得分:0)
我认为你不能得到你想要的东西,但我很确定做出以下改变可以为你产生预期的结果:
为关系添加别名(您可以选择更合适的一些)
Order.hasOne(models.OrderHasWarranty,{as: "warranty1", foreignKey:"orderId"});
Order.hasOne(models.OrderHasWarranty,{as: "warranty2", foreignKey:"warrantyFromOrderId"});
然后,您可以在搜索中包含这两个内容,如下所示:
Order.find({
where: {
id: 25459
},
include: ['warranty1', 'warranty2']
}).then(...).catch(...);
这会产生这样的结果:
LEFT OUTER JOIN `order_has_warranties` AS `warranty1`
ON `Order`.`id` = `OrderHasWarranty`.`orderId`
LEFT OUTER JOIN `order_has_warranties` AS `warranty2`
ON `Order`.`id` = `OrderHasWarranty`.`warrantyFromOrderId`
WHERE `Order`.`id` = '25459'
修改强>
您报告的错误可能是由使用hasOne
方法声明关联引起的。 Sequelize Doc说:
即使它被称为HasOne关联,对于大多数1:1关系,您通常需要BelongsTo关联,因为BelongsTo会在hasOne将添加到目标上的源上添加foreignKey。
因此,通过添加belongsTo
关联,如下所示:
OrderHasWarranty.belongsTo(models.Order, {as: "warranty1", foreignKey:"orderId"});
OrderHasWarranty.belongsTo(models.Order, {as: "warranty2", foreignKey:"warrantyFromOrderId"});
你的错误应该得到解决。