簡體   English   中英

Symfony主義堅持多對一

[英]Symfony Doctrine Persist Many To One

我在Symfony中堅持與學說的實體關聯時遇到問題。 開門見山:

這個想法是有一個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(); 在持久存儲和刷新之后,數據是正確的並且要約被取消。

但是一旦離開頁面,數據就會丟失。

對於聯系人的其他類型的關系(多對多),我也有這個問題。 在不同的Dossiers可能有多個Contacts

我希望我足夠清楚,以便任何人都可以提前幫助,謝謝!

我實際上解決了自己的問題。

原來,Symfony / Doctrine僅在需要時才初始化實體。 轉儲數據不會加載該實體,但是嘗試訪問twig中的屬性將加載所選的實體。

這非常有效(不會加載所有不必要的字段)。

所以我有點as愧,但這是我曾經嘗試過的方法(在帶有上述控制器的樹枝模板中): {{dump()}}

那不會初始化Offre實體,但是會返回名稱: {{dump(dossier.offre.name)}}

感謝您的所有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM