在我的symfony项目(5.x版本)上,我在Metas和标记之间有一个简单的ManyToMany关系(没有提取,也没有级联定义)。
class Meta
{
...
/**
* @ORM\ManyToMany(targetEntity="Tag", mappedBy="meta")
* @ORM\OrderBy({"name" = "ASC"})
*/
protected $tags;
}class Tag
{
...
/**
* @ORM\ManyToMany(targetEntity="Meta", inversedBy="tags")
* @ORM\JoinTable(name="app_meta_tag")
* @ORM\JoinColumn(name="meta_id")
*/
protected $meta;
}我可以有40000个具有相同标签的metas (例如“测试”)。
当我有“测试”标签到一个元,然后持久化和刷新,所有与这个标签相关的元被刷新.并返回一个500错误,因为内存限制。这种行为似乎与医生:https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/working-with-associations.html#persistence-by-reachability-cascade-persist的理论相矛盾。
有人能解释一下吗?谢谢!
发布于 2020-10-17 10:41:53
由于我们有一个elasticsearch数据库,允许我们获取标记的所有metas,我终于找到了一个woking解决方案:使关系单向。
发布于 2020-10-15 15:36:52
当您将Doctrine中的两个实体关联在一起时,您有一个拥有方和一个反向方,在更新拥有方原则时,它将保存链接到的所有反转侧。相反的情况下,没有任何东西会被拯救。
在这里,拥有方是标记(反向-by=“标记”),这意味着只有在更新标记时才会进行更新。
您应该反转mappedBy和inversedBy目标类。
https://stackoverflow.com/questions/64337839
复制相似问题