我有一个问题是在Symfony中持久存在实体与Doctrine的关联。直截了当:
我们的想法是拥有一个Dossier
实体,该实体只能有一个Offres
实体,而Offre
实体可以有多个Dossier
。
理想情况下,我希望从双方(双边)获取这种关系。
我遵循了Doctrine的文档,最终得到了以下YAML配置:
Dossier:
type: entity
table: dossier
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
*a bunch of fields*
manyToOne:
offre:
targetEntity: AppBundle\Entity\Offres
inversedBy: dossiers
cascade: ["persist"]
joinColumn:
name: dossier_offre
nullable: false
对于Offres
:
Offres:
type: entity
table: offres
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
*a bunch of fields*
oneToMany:
dossiers:
targetEntity: AppBundle\Entity\Dossier
mappedBy: offre
cascade: ['persist']
我的控制器按原样插入数据(考虑$ offre是一个有效的Offre
实体并且所有使用的方法都存在):
$dossier = new Dossier();
$dossier->setOffre($offre);
$offre->addDossier($dossier);
$em->persist($dossier);
$em->persist($offre);
$em->flush();
如果我试着回来
$dossier->getOffre();
在坚持和冲洗之后,数据是正确的,并且报价被显示。
但是一旦我离开页面,数据就会丢失。
我对联系人的其他类型的关系(多对多)也有这个问题。可能有多个Contacts
涉及不同的Dossiers
。
我希望我足够清楚,以便任何人都能提前帮助,谢谢!
答案 0 :(得分:0)
我实际上解决了我自己的问题。
原来Symfony / Doctrine只在需要时初始化实体。转储数据不会加载实体,但尝试访问twig中的属性将加载选定的实体。
这非常有效(不会加载所有不必要的字段)。
所以我有点惭愧但这是我以前尝试的(在上面的控制器的twig模板中):
Microsoft.mshtml
这不会初始化{{dump()}}
实体,但确实会返回名称:
Offre
感谢您的帮助!