Symfony Doctrine坚持多对一

时间:2016-01-06 20:51:56

标签: php symfony doctrine-orm doctrine

我有一个问题是在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

我希望我足够清楚,以便任何人都能提前帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

我实际上解决了我自己的问题。

原来Symfony / Doctrine只在需要时初始化实体。转储数据不会加载实体,但尝试访问twig中的属性将加载选定的实体。

这非常有效(不会加载所有不必要的字段)。

所以我有点惭愧但这是我以前尝试的(在上面的控制器的twig模板中):     Microsoft.mshtml

这不会初始化{{dump()}}实体,但确实会返回名称:     Offre

感谢您的帮助!

相关问题