2013-02-20 15 views
5

io SimpliFly il mio codice, ho te prossimo:Symfony ManyToOne rapporto getter resi oggetto vuoto

Dottore entità:

use ...\...\Entity\Paciente; 

    class Doctor extends Usuario { 

     public function __construct() { 
      ... 
      $this->pacientes = new ArrayCollection(); 
      ... 

     } 


     /** 
     * Número de colegiado - numColegiado 
     * 
     * @var string 
     * 
     * @ORM\Column(name="numColegiado", type="string", length=255, unique=true) 
     */ 
     protected $numColegiado; 


     /** 
     * @ORM\OneToMany(targetEntity="Paciente", mappedBy="doctor") 
     * @var \Doctrine\Common\Collections\ArrayCollection 
     */ 
     private $pacientes; 

     ... 

    } 

Paciente entità:

use \...\...\Entity\Doctor; 

... 

class Paciente extends Usuario { 

    } 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 


    /** 
    * @ORM\ManyToOne(targetEntity="Doctor", inversedBy="pacientes") 
    * @ORM\JoinColumn(name="doctorNum", referencedColumnName="numColegiado", nullable=TRUE) 
    * 
    * @var type 
    */ 
    protected $doctor; 

    ... 

    /** 
    * Set doctor 
    * 
    * @param Doctor $doctor 
    * @return Paciente 
    */ 
    public function setDoctor(Doctor $doctor = null) 
    { 
     $this->doctor = $doctor; 

     return $this; 
    } 

    /** 
    * Get doctor 
    * 
    * @return Doctor 
    */ 
    public function getDoctor() 
    { 
     return $this->doctor; 
    } 
} 

Ok, la questione è, quando eseguo quel codice (ovviamente c'è una relazione creata e questo oggetto esiste nel database):

\Doctrine\Common\Util\Debug::dump($paciente->getDoctor()); 

esso stampa che segue:

object(stdClass)#804 (28) { ["__CLASS__"]=> string(34) "Knoid\CorcheckBundle\Entity\Doctor" ["__IS_PROXY__"]=> bool(true) ["__PROXY_INITIALIZED__"]=> bool(false) ["id"]=> NULL ["numColegiado"]=> NULL ["pacientes"]=> NULL ["nombre"]=> NULL ["apellidos"]=> NULL ["dni"]=> NULL ["tipo"]=> NULL ["username"]=> NULL ["usernameCanonical"]=> NULL ["email"]=> NULL ["emailCanonical"]=> NULL ["enabled"]=> NULL ["salt"]=> NULL ["password"]=> NULL ["plainPassword"]=> NULL ["lastLogin"]=> NULL ["confirmationToken"]=> NULL ["passwordRequestedAt"]=> NULL ["groups"]=> NULL ["locked"]=> NULL ["expired"]=> NULL ["expiresAt"]=> NULL ["roles"]=> NULL ["credentialsExpired"]=> NULL ["credentialsExpireAt"]=> NULL } 

Come si può vedere, tutte le atributes dell'oggetto "dottore" sono nulli, l'oggetto esiste, ma è vuota, nel mio DB esiste questo oggetto e 'isn' t vuoto.

Qualche idea di cosa sta succedendo?

risposta

3

Questo perché l'oggetto proxy non è ancora stato inizializzato. Un modo per inizializzarlo consiste nell'interrogare l'oggetto, ad es. $doctor->getId(). Se si esegue il dump dell'oggetto, vedrai che tutti gli attributi sono "visibili"

+0

In qualche modo è parente di quello. Ora ho ricevuto questa eccezione: "[1/2] ErrorException: Avviso: indice indefinito: id in /var/www/vhosts/default/htdocs/Symfony/app/cache/dev/doctrine/orm/Proxies/__CG__KnoidCorcheckBundleEntityDoctor.php line 48 "ma solo se provo a ottenere l'identificazione del medico. –

+0

Suppongo tu abbia definito/generato un getter per l'id? –

+0

Sì, "public function getId() { return $ this-> id; }" nella classe di entità medico –

0

La risposta di Thomas K ha funzionato per me nel mio stesso pacchetto. Se traduco quello che ho fatto:

$myPaciente = $em->getRepository('MyBundle:Paciente')->findOneBy(array('numColegiado' => $value)); 

aggiungo $myPaciente->getDoctor()->getName();

Poi l'inizializzazione è stato fatto e ho potuto scaricare $ myPaciente con tutte le informazioni circa il medico ad essa correlata.