Dears У меня есть модельный заказ, связанный с моделью OrderHasWarranty
Таким образом, у OrderHasWarranty есть 2 внешних ключа, мне нужно Sequelize, чтобы проверить включение обоих этих внешних ключей (без использования условий)
поэтому я использовал ниже ассоциации в модели заказа
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';
Так что мне нужно использовать условие ИЛИ в ассоциациях, я пытался использовать 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'
EDIT: Ошибка, о которой вы сообщаете, может быть вызвана использованием метода hasOne
для объявления ассоциации. Sequelize Doc говорит:
Несмотря на то, что это называется ассоциацией HasOne, для большинства отношений 1:1 вы обычно хотите ассоциацию BelongsTo, так как BelongsTo добавит foreignKey в источник, где hasOne добавит в цель.
Итак, добавив также ассоциацию belongsTo
, например:
OrderHasWarranty.belongsTo(models.Order, {as: "warranty1", foreignKey:"orderId"});
OrderHasWarranty.belongsTo(models.Order, {as: "warranty2", foreignKey:"warrantyFromOrderId"});
ваша ошибка должна быть разрешена.