2015-06-03 4 views
0

Я не могу понять его ..Symfony2 объектные внешние ключи

Почему я не доступ к Country таблице?

countryName должен показать Great Britain, но это не так.

Это моя свалка ($ Пользователь):

enter image description here

Мой мой кусок кода User лица:

/** 
* 
* @ORM\ManyToOne(targetEntity="Dashboard\MainBundle\Entity\Country", cascade={"persist"}) 
* @ORM\JoinColumn(name="country_id", referencedColumnName="id", nullable=true) 
* 
*/ 
private $countryId; 

И мой кусок кода Country Entity:

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

ответ

1

В зависимости от того, как вы получите пользователь может быть это ленивая нагрузка, которую вы используете, которая выведет страну только в том случае, если вы вызываете геттер явно, чтобы всегда получать страну с пользователем:

/** 
* 
* @ORM\ManyToOne(targetEntity="Dashboard\MainBundle\Entity\Country", cascade={"persist"}, fetch="EAGER") 
* @ORM\JoinColumn(name="country_id", referencedColumnName="id", nullable=true) 
* 
*/ 
private $countryId; 

Но все же нам нужно знать, как вы получаете пользователя, ленивая нагрузка может переопределить выборку.

+0

Я получаю пользователя '$ User = $ this-> getUser();' – Gemmi

+0

, то этот вариант аннотации, который я дал вам, должен работать. –

+0

И это работает! :) Спасибо. – Gemmi

1

Ваш Country теперь является только объектом прокси - функция dump не вызывает Доктрину для получения связанного объекта. Попробуйте, прежде чем свалка получить объект, например:

dump($User->getCountry()): 
dump($User); 

ИЛИ попытаться слева присоединиться к вам Country в QueryBuilder

ИЛИ найти информацию о ленивой нагрузки в Doctrine2 here

Смежные вопросы