2015-08-01 13 views
10

Ich habe zwei Entitäten in meinem Projekt: Benutzer und Avatar.Lazy Loading vermeiden Doctrine Symfony2

Benutzer besitzt Avatar mit einer OneToOne-Beziehung.

Avatar ist eine Entität mit einem Dateiobjekt und einem fileName. Es verwendet @ORM \ HasLifecycleCallbacks, um die Datei zu speichern oder zu entfernen, wie in der Symfony2 documentation beschrieben.

In meinem Controller, mag ich die Avatar Entität aus dem aktuellen Benutzer entfernen (i $currentUser = $this->get('security.context')->getToken()->getUser() verwenden), aber ich kann den Avatar mit $currentUser->getAvatar() nicht bekommen:

var_dump($currentUser->getAvatar());exit; 

Ausgang:

object(Proxies\__CG__\Participso\UserBundle\Entity\Avatar)[355] 
    public '__initializer__' => 
object(Closure)[348] 
    public '__cloner__' => 
object(Closure)[349] 
    public '__isInitialized__' => boolean false 
    private 'id' (Participso\UserBundle\Entity\Avatar) => int 20 
    public 'file' => null 
    private 'fileName' (Participso\UserBundle\Entity\Avatar) => null 

Aber wenn ich tun

$whatever = $currentUser->getAvatar()->getFileName(); 
var_dump($currentUser->getAvatar());exit; 

Ausgang:

object(Proxies\__CG__\Participso\UserBundle\Entity\Avatar)[355] 
    public '__initializer__' => 
object(Closure)[348] 
    public '__cloner__' => 
object(Closure)[349] 
    public '__isInitialized__' => boolean false 
    private 'id' (Participso\UserBundle\Entity\Avatar) => int 20 
    public 'file' => null 
    private 'fileName' (Participso\UserBundle\Entity\Avatar) => string 'd4e5eadd3757498a22b14ad1f81869c2baf459d3.png' 

Das ist ziemlich nervig ... Hat jemand einen Hinweis, um das zu vermeiden?

Antwort

16

Wie in der Doctrine docs beschrieben, müssen Sie nur das Abrufverhalten als eifrig angeben.

/** 
* @OneToOne(targetEntity="User", fetch="EAGER") 
* @JoinColumn(name="user_id", referencedColumnName="id") 
*/ 

Siehe Dokumentation für YAML oder andere Konfigurationsbeispiele.

+0

Vielen Dank so Mutch, ich habe jetzt stundenlang gesucht! (Es ist "Eager", "eifrig" werfen eine Ausnahme) – Leogout

+0

Danke, aktualisiert. – Anonymous

+0

Das Ändern des Abrufmodus während einer Abfrage ist nur für Eins-zu-Eins- und Viele-zu-Eins-Beziehungen möglich. –