作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
亲爱的,我的模型订单与 OrderHasWarranty 模型关联
所以 OrderHasWarranty 有 2 个外键,我需要 Sequelize 来检查这两个外键的包含(不使用 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 但没有运气
谢谢
最佳答案
我认为您无法得到您想要的东西,但我很确定进行以下更改可以为您带来所需的结果:
为关系添加别名(您可以选择更合适的别名)
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说:
Even though it is called a HasOne association, for most 1:1 relations you usually want the BelongsTo association since BelongsTo will add the foreignKey on the source where hasOne will add on the target.
因此,还添加 belongsTo
关联,如下所示:
OrderHasWarranty.belongsTo(models.Order, {as: "warranty1", foreignKey:"orderId"});
OrderHasWarranty.belongsTo(models.Order, {as: "warranty2", foreignKey:"warrantyFromOrderId"});
您的错误应该已解决。
关于jquery - Sequelize 关联 On 或 ON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48939029/
我是一名优秀的程序员,十分优秀!