2014-02-19 3 views
0

Моего запроса с использованием DQL является:Как получить объект из связанной таблицы

$query = $this->_em->createQuery(

    'SELECT v, a 
    FROM MyBundle:Products v 
    JOIN v.category a WITH a.id = :id 
    WHERE v.main = 1' 
) 
->setMaxResults(1) 
->setParameters(array('id' => $id)); 



$result = $query->getOneOrNullResult(); 

var_dump($result->getCategory()->getId()); 

Пожалуйста, может Sombody объяснить мне, почему var_dump ничего не возвращает (белые страницы)? Я потратил много времени на это, но я не понимаю, в чем причина такого поведения.

Я знаю, я могу выбрать только идентификатор таблицы категории Мне нужен дырочный объект категории. Вышеприведенный пример - это просто пример, что ни один идентификатор не возвращается.

Или есть другой способ получить объект связанной таблицы?

+0

Покажите мне свой журнал ошибок. Включенные отчеты об ошибках должны решить проблему с белой страницей;) – NHG

+0

Нет ничего, в журнале и сообщениях об ошибках устанавливается значение E_ALL. Я не знаю, если причина в том, что объект слишком велик. Во всяком случае, это странно:/ – gavec

+0

Нет выхода var_dump? Может быть, исключение приведет к казни в другом месте? Пробовал настройку значения ini error_reporting в true и отключение буферизации вывода? – enterx

ответ

0

Спасибо за все ваши ответы. Я нашел проблему, которая была на моих свалках. Но только в том случае, когда я сбрасывал большие объекты, как и мое сущность с отношениями. Скрипт остановился на нем или что-то еще и никогда не будет продолжаться. Поэтому, когда я удалял эти свалки, он работает правильно.

Возможно, работоспособное решение для захоронения больших объектов может быть в комментарии Enterx, но я не мог попробовать, потому что мое приложение находится на удаленном сервере, где у меня нет доступа к php.ini.

0

Прежде всего, является ли имя организации действительно Products, а не Product?

Во-вторых, убедитесь, что обратное отображение настроено правильно для category.

Я просто попробовал простой пример с одним и тем же вариантом использования, и он отлично работает.

$em = $this->get('doctrine')->getEntityManager(); 
$query = $em->createQuery(
     'SELECT p, c 
     FROM TestTestBundle:P p 
     JOIN p.children c WITH c.id = :id 
     WHERE p.main = 1' 
    ) 
    ->setMaxResults(1) 
    ->setParameters(array('id' => $id)); 

if (null !== $result = $query->getOneOrNullResult()) { 
    foreach ($result->getChildren() as $child) { 
     var_dump($child->getTitle()); 
    } 
} 

Сделайте так, как сказал NHG, и включите отчет об ошибках, чтобы мы могли получить намек на то, что не так.

Здесь представлено сопоставление ORM для двух объектов.

Родитель

class P 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Test\TestBundle\Entity\C", mappedBy="parent") 
    */ 
    private $children; 

    public function getChildren() 
    { 
     return $this->children; 
    } 

Ребенок

class C 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Test\TestBundle\Entity\P", inversedBy="children") 
    */ 
    private $parent; 
Смежные вопросы