Вложенный метод findall () с «case» эквивалентен оператору включения - PullRequest
0 голосов
/ 21 июня 2019

Я очень плохо знаком с API (через неделю), и я застрял с проблемой.

У меня есть таблицы в Postgres, и я создал модели для каждого из них. Существует ссылка от одного к другому (при некоторых обстоятельствах). Если ссылка не существует, я хочу использовать значение по умолчанию, которое содержится в другой таблице.

Пример:

Table - items
- id (int)
- name (text)
- startDateTime (date)
- endDateTime (date)

Table - itemTypes
- id (int)
- name (text)
- isDefault (boolean)

Table - itemTypesLinkItems
- id (int)
- itemsId (int)
- itemTypesId (int)
- fromDateTime (date)
- toDateTime (date)

В любой заданный день будет отображаться список предметов. Некоторые из них могут быть связаны с itemTypes через таблицу itemTypesLinkItems, и поэтому я могу показать itemTypes.Name. В остальном я хотел бы показать значение itemTypes.Name, где isDefault = true.

Я искал все, пытался сделать это с помощью представлений SQL, но безуспешно. Я надеюсь, что это то, что можно сделать с помощью JavaScript API.

router.get(‘/:date’, (req, res) =>
db.items.findAll()({
  include: [
    {
    model: db.itemtypelinkitem,
    required: false,
    include: [
      {
      model: db.itemtypes 
      }
    ]
    where: {
      startDateTime: {[Op.lte]: req.params.date},
      endDateTime: {[Op.gte]: req.params.date}
    }
    }
  ]

Я просто не знаю, куда идти отсюда. Если я исключу «обязательный», то будут возвращены только те элементы, на которые есть ссылка. Если я включу его, то все они будут отображаться, и если есть ссылка, она возвращает подробности, в противном случае просто возвращает []. В случае, если он возвращает [], я хотел бы заменить его значениями по умолчанию из itemTypes.

1 Ответ

0 голосов
/ 21 июня 2019

Я надеюсь, что понял ваш вопрос хорошо.

Вы сделали много ко многим Отношение между (items, itemTypes) и хотите получить значение по умолчанию itemType при получении всех предметов. поэтому я думаю, что эта проблема не связана с Sequlize. Вы должны вставить «itemType» по умолчанию при вставке новой записи в таблицу «items».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...