включить или отключить ассоциацию

0

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, но не повезло

благодарю вас

Теги:
sequelize.js

1 ответ

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'

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"});

ваша ошибка должна быть разрешена.

  • 0
    спасибо, дорогой, поэтому я сделал следующие изменения для каждого комментария Order.hasOne (models.OrderHasWarranty, {as: "parentOrder", foreignKey: "orderId"}); Order.hasOne (models.OrderHasWarranty, {as: "childOrder", foreignKey: "rantyFromOrderId "}); и теперь я получаю эту ошибку OrderHasWarranty (orderId) не связан с Order!
  • 0
    это мое включение: ["parentOrder", "childOrder"], поэтому я получаю новую ошибку Включить неожиданное. Элементом должен быть либо Модель, Ассоциация, либо объект.
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню