2013-04-05 5 views
1

Я настроил Doctrine несколько таблиц наследования в моем приложении - см нижеДоктрина DQL экземпляр для мульти таблицы сущности наследования

/** 
* @Entity 
* @InheritanceType("JOINED") 
* @DiscriminatorColumn(name="type", type="string") 
* @DiscriminatorMap({ 
* "news" = "News" , 
* "press_release" = "PressRelease"}) 
* 
* @table(name="pages") 
*/ 
class PressRelease extends Page {...} 
class News extends Page {...} 

Мой пользовательский репозиторий запроса

$query = $this->getEntityManager()->createQuery('SELECT u FROM MyStoreBundle:User u 
LEFT JOIN u.page p 
WHERE p INSTANCE OF :newsType' 
)->setParameter('newsType', new News()); 

Я думал, что это будет работать, однако я продолжаю получать следующую ошибку:

Notice: Undefined index: id in /path/to/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php line 282 

Очевидно, что мой News объект не имеет поля id, так как это наследуется при расширении класса Page, у которого определено свойство id, знает ли кто-нибудь, что я делаю неправильно?

Заранее спасибо

ответ

0

Доктрина устанавливает все свойства частной. Таким образом, вы не можете получить доступ к ним из унаследованного класса. Вы можете установить свойства private в родительском классе на protected. Думаю, тогда это сработает.

+0

Я думал, что это может быть случай, однако я изменил свойство родительского класса для 'protected' и он по-прежнему не работает, я» ve отлаживает это дальше, и похоже, что «Метаданные класса Doctrine» не забирают это расширенный объект, поэтому не распознают свойство родительского идентификатора – Matt

5

экземплярном ожидает имя класса объекта, а не экземпляр:

->setParameter('newsType', 'YourProject\News'); 
+0

. Я думаю, что он будет экранирован и не будет работать. Не связывайте его как параметр. Поместите его так: $ qb-> где ($ qb-> expr() -> isInstanceOf ('p', 'YourProject \ News')); ' – Aistis

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