FOSElasticaBundle: отношения Много-Много - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь использовать FOSElasticaBundle в моем проекте Symfony 4, и у меня есть некоторые проблемы.

У меня есть сущность «Пользователи» со следующей аннотацией в свойстве «сегменты»:

* @var Collection $segments * @ORM\ManyToMany(targetEntity="App\Entity\Segment", mappedBy="users", cascade={"persist", "remove"})

Какая правильная форма для сопоставления в файле fos_elastica.yaml?

1 Ответ

0 голосов
/ 11 октября 2018

Я бы посоветовал вам подумать в своих случаях использования, а затем решить, какие связанные объекты вы собираетесь использовать в целях поиска. Решив, вы можете сделать две вещи:

Вариант A, используйте вложенное поле. Проще, но если вы обновите дочернюю (связанную) сущность, индекс Elasticsearch не будет обновлен. Йо должен убедиться, что это происходит в вашем коде. Например, каждый раз, когда дочерняя сущность обновляется, вы устанавливаете отметку времени в родительском entotity, поэтому FosElasticaBundle перехватывает эту последовательность и запускает сериализатор сущности, чтобы дочерняя сущность становилась сериализованной.

Вариант B, использовать дочернее родительское отношение в Elasticsearch. В этом случае FosElasticaBundle будет правильно отслеживать изменения вашей сущности для каждой сущности Doctrine, поэтому вам не нужно управлять этим в своем коде.

В обоих случаях отношения «многие ко многим» становятся отношениями «один ко многим». В варианте A это делается сериализаторами, которые встраивают дочерний документ в родительский. Во втором случае это переводится на отношения родитель-потомок.

...