Как правильно справиться с обратными отношениями с тем же именем - PullRequest
0 голосов
/ 19 июня 2020

У меня есть ситуация, когда есть несколько штук с одним и тем же полем. Однако при использовании обратной связи это становится проблемой, потому что они не могут сосуществовать:

{
  name: '_relatedPeople',
  type: 'joinByArrayReverse',
  withType: 'organization',
  filters: {
    projection: {
      _url: 1,
      title: 1,
      tags: 1
    }
  },
},
{
  name: '_relatedPeople',
  type: 'joinByArrayReverse',
  withType: 'event',
  filters: {
    projection: {
      _url: 1,
      title: 1,
      tags: 1
    }
  },
},

Тип события перезаписывает тип организации. Вот поле, которое есть у обоих этих типов (для DRY):

{
  "label": "Related People",
  "help": "",
  "name": "_relatedPeople",
  "type": "joinByArray",
  "withType": ["person"],
  "filters": {
    "projection": {
      "_url": 1,
      "title": 1
    }
  }
}

Я пробовал использовать idsField и reverseOf, но оба потерпели неудачу. Какова подходящая стратегия для данного типа человека, чтобы получить обратную связь двух других типов?

1 Ответ

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

Я нашел ответ методом проб и ошибок при просмотре ApostropheCMS do c. Я подумал, что поделюсь своим решением здесь, на случай, если другие наткнутся на проблему того же типа:

{
  name: '_organizations', // type from which to get the pieces, prefixed with "_" and suffixed with "s"
  reverseOf: '_relatedPeople', // field name from which to get the pieces
  type: 'joinByArrayReverse',
  withType: 'organization', // type which holds the pieces
  filters: {
    projection: {
      _url: 1,
      title: 1
    }
  },
},
{
  name: '_events', // type from which to get the pieces, prefixed with "_" and suffixed with "s"
  reverseOf: '_relatedPeople', // field name from which to get the pieces
  type: 'joinByArrayReverse',
  withType: 'event', // type which holds the pieces
  filters: {
    projection: {
      _url: 1,
      title: 1
    }
  },
},

Обратите внимание на свойства name, reverseOf и withType, как вы может гарантировать, что результаты не будут перезаписаны.

Затем можно использовать data.piece._organizations и data.piece._events и получить _relatedPeople для каждого.

...