2012-09-21 200 views
2

我的应用程序中有三个相关实体,具有oneToMany方法:一个“Aufwand”属于一个“Aufgabe”,属于一个“版本”。在控制器中的某一点上,我写的:Symfony2和Doctrine:代理类不会延迟加载实体字段

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

,并传递到嫩枝模板用:

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

“版本”有一个字符串属性“nummer”至极我尝试访问我的使用

{{ Aufwand.version.nummer }} 

但不打印输出,对于相同的“版本”的所有其他属性模板 - 但我检查和Aufwand.version单独确实是一个XXXXVersionProxy - 对象,因为它应该是。因此,从教义中“懒惰加载”并不真正发生。

这是在 “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 

getter和setter在 “版本”和“Aufgabe”是标准的“get {Attribute}()”,这些属性本身是私有的。我已经尝试清除元数据高速缓存并在控制器中倾销$Aufwand->getAufgabe()->getVersion() // also plus ->getNummer(),所有内容似乎都是正确的。在数据库表“Aufwand”有一个“版本”,应该给我它的“数字”的“Aufgabe”...

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

+0

我发现http://stackoverflow.com/questions/7599007/lazy-loading-properties-not-loading-in-doctrine-2-0?rq=1有类似的问题和一个解决方法,使用'fetch:EAGER '在“manytoOne” - 定义中 – Manuel

回答

0

为什么不只是传递$ Aufwand到模板做:

{{Aufwand.aufgabe.version.number}} 

应该从视图中工作。