2

我的应用程序中有三个具有 oneToMany 关系的相关实体:一个“Aufwand”属于一个“Aufgabe”,一个“Aufgabe”属于一个“版本”。在控制器的某个时刻,我写道:

$Aufwand['version'] = $Aufwand->getAufgabe()->getVersion();

并将其传递给 Twig 模板:

return $this->render('XXX:Aufwand:index.html.twig', array('Aufwand' => $Aufwand));

“版本”有一个字符串属性“数字”,我尝试在我的模板中使用

{{ Aufwand.version.nummer }}

但它什么也不打印,对于“版本”的所有其他属性都是一样的——但我检查了一下,Aufwand.version它确实是一个XXXXVersionProxy——对象,它应该是。因此,显然 Doctrine 中的“延迟加载”并没有真正发生。

这是“Version.orm.yml”中的映射信息:

XXX\Entity\Version:
    type: entity
    repositoryClass: XXX\Repository\VersionRepository
    table: version

    id: 
        Projekt:
            associationKey: true
        nummer:
            type: string
            length: 20
        
    fields:
        beschreibung:
            type: text
            nullable: true
        faktor: 
            type: decimal
            precision: 2
            scale: 1

    uniqueConstraints:
        version_nr_unique:
           columns: nummer
        
    oneToMany:
        Aufgaben:
            targetEntity: Aufgabe
            mappedBy: Version
                    
    manyToOne:
        Projekt:
            targetEntity: Projekt
            inversedBy: Versionen
            joinColumn:
                name: projekt_nummer
                referencedColumnName: nummer

在“Aufgabe.orm.yml”中:

XXX\Entity\Aufgabe:
    type: entity
    repositoryClass: XXX\Repository\AufgabeRepository
    table: aufgabe
    
    id: 
        id:
            type: integer
            generator:
                strategy: AUTO
            
    fields:
        name:
            type: string
            length: 40
        beschreibung:
            type: text
            nullable: true
        faktor: 
            type: decimal
            precision: 2
            scale: 1
        soll_aufwand:
            type: integer
    
    oneToMany:
        Aufwaende:
            targetEntity: Aufwand
            mappedBy: Aufgabe
    
    manyToOne:
    
        Kategorie:
            targetEntity: Kategorie
            inversedBy: Aufgaben
            joinColumn:
                name: kategorie_id
                nullable: false
                referencedColumnName: id
    
        Projekt:
            targetEntity: Projekt
            inversedBy: Aufgaben
            joinColumn:
                name: projekt_nummer
                referencedColumnName: nummer
                nullable: true
                 
        Version:
            targetEntity: Version
            inversedBy: Aufgaben
            joinColumn:
                name: version_nummer
                nullable: true
                referencedColumnName: nummer

“Version”和“Aufgabe”中的getter 和setter 是标准的“get{Attribute}()”,属性本身是私有的。我已经尝试清除元数据缓存并转储$Aufwand->getAufgabe()->getVersion() // also plus ->getNummer()到控制器中,一切似乎都在那里。在数据库表中,“Aufwand”有一个“Aufgabe”,它有一个“版本”,应该给我它的“数字”......

我在 PostgreSQL 数据库上使用 PHP Symfony 2.0.16 和 Doctrine 2,任何寻找错误的提示将不胜感激。我想它可能在 Twig 模板中,但我不知道出了什么问题。

4

1 回答 1

0

为什么不将 $Aufwand 传递给模板并执行以下操作:

{{Aufwand.aufgabe.version.number}}

这应该从视图中工作。

于 2013-03-08T20:14:11.637 回答