FOSElasticaBundle:多对多关系

时间:2018-09-03 12:30:26

标签: foselasticabundle

我正在我的symfony 4项目上尝试使用FOSElasticaBundle,但遇到了一些问题。

我有一个实体“ Users”,在属性“ segments”中具有下一个注释:

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

在fos_elastica.yaml文件中进行映射的正确格式是什么?

1 个答案:

答案 0 :(得分:0)

我建议您考虑用例,然后确定要用于搜索目的的相关实体。确定后,您可以做两件事:

选项A,使用嵌套字段。比较简单,但是,如果更新子(相关)实体,则不会更新Elasticsearch索引。您必须确保这在您的代码内发生。例如,每次更新子实体时,您都要在父实体中设置一个时间戳,以便FosElasticaBundle捕获该挑战并运行实体序列化程序,以便子实体进行序列化。

选项B,在Elasticsearch中使用子父关系。在这种情况下,FosElasticaBundle将针对每个Doctrine实体正确跟踪您的实体更改,因此您无需在代码中进行管理。

在两种情况下,您的多对多关系都变成了一对多关系。在选项A中,这是通过将子文档嵌入父文档中的序列化程序完成的。在第二种情况下,它将转换为父子关系。