Обратная связь; полиморфная принадлежность и множество проходов в зависимости от типа владельца

#relationship #loopbackjs

#взаимосвязь #loopbackjs

Вопрос:

У меня есть объект Bid. Заявка может принадлежать клиенту или Перевозчику (полиморфная принадлежность).

Кроме того, Клиент может принадлежать Перевозчику (если Клиент принадлежит перевозчику, он не может делать ставки), и Клиент — это тот, кто выполняет услугу, за которую они предлагают цену.

Итак, если Перевозчик делает ставку, он должен назначить ей клиентов. В этом сценарии у многих клиентов может быть много заявок, но они не являются заявителями.

Интересно, как лучше всего это сделать. Это похоже на условное отношение.

Я пробовал это в bid.json:

 "relations":{
  "bidder":{
    "type": "belongsTo",
    "polymorphic": true
  },
  "customers": {
    "type": "hasMany",
    "model": "customer",
    "foreignKey": "customerId"
  }
}
  

customer.json:

 "relations": {
  "bids": {
    "type": "hasMany",
    "model": "Bid",
    "foreignKey": "bidderId",
    "polymoprhic": "bidder"
  }
  "carrier": {
    "type": "belongsTo",
    "model": "Carrier",
    "foreignKey": "carrierId"
  },
  "assignments": {
    "type": "hasMany",
    "model": "Bid",
    "foreignKey": "bidId"
  }
}
  

carrier.json

 "relations": {
  "bids": {
    "type": "hasMany",
    "model": "Bid",
    "foreignKey": "bidderId",
    "polymoprhic": "bidder"
  }
  "carrier": {
    "type": "hasMany",
    "model": "Customer",
    "foreignKey": ""
  }
}
  

Ответ №1:

В итоге я добавил новую сущность «Назначение». Таким образом, если перевозчик делает ставку, он может назначить ему клиентов. Если клиент является участником торгов, он назначает себя автоматически

bid.json

 "relations":{
  "bidder":{
    "type": "belongsTo",
    "polymorphic": true
  },
  "assignments": {
    "type": "hasMany",
    "model": "assignment",
    "foreignKey": "bidId"
  } 
}
  

customer.json

 "relations": {
    "bids": {
      "type": "hasMany",
      "model": "Bid",
      "foreignKey": "bidderId",
      "polymoprhic": "bidder"
    }
    "carrier": {
      "type": "belongsTo",
      "model": "Carrier",
      "foreignKey": "carrierId"
    }, 
    "assignments": {
      "type": "hasMany",
      "model": "Assignment",
      "foreignKey": "customerId"
    }
  }
  

carrier.json

 "relations": {
  "bids": {
    "type": "hasMany",
    "model": "Bid",
    "foreignKey": "bidderId",
    "polymoprhic": "bidder"
  },
  "customers": {
    "type": "hasMany",
    "model": "Customer",
    "foreignKey": "carrierId"
  }
}
  

assignment.json

 "relations": {
    "customer": {
      "type": "belongsTo",
      "model": "Customer",
      "foreignKey": ""
    },
    "licitacion": {
      "type": "belongsTo",
      "model": "Bid",
      "foreignKey": ""
    }
  }