2013-10-15 28 views
0

我有實體Symfony2的 - 繼承 - 庫查找方法

<?php 

namespace Proj\Bundle\MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* ClassTop 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Proj\Bundle\MyBundle\Repository\ClassTopRepository") 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="aVal", type="string") 
* @ORM\DiscriminatorMap({ "ValOne" = "ClassSubOne", "ValTwo" = "ClassSubTwo", "ValThree" = "ClassSubThree" }) 
* 
*/ 
class ClassTop 
{ 
    ..... 
} 

class ClassSubOne extends ClassTop 
{ 
    .... 
} 

class ClassSubTwo extends ClassTop 
{ 
    .... 
} 

class ClassSubThree extends ClassTop 
{ 
    .... 
} 

我的問題是,當我打電話查找()(或findOneBy,的findAll等)的方法,我有一個Oracle錯誤。

$entityManager->getRepository('ProjMyBundle:ClassSubOne')->findAll() 

在查詢我

SELECT field, field2 FROM CLASSTOP WHERE aVAL IN() 

鑑別值「瓦隆」不映射和學說中沒有通過。

任何幫助將不勝感激。

Thx

回答

0

您需要爲子類而不是頂級存儲庫類。你將你的子類視爲完全定義的類,這就是全部。然後,當你需要查詢你的實體時,你不會去頂級實體,而是去找子類。我不知道我是否在這裏清醒過來!

你的情況:

@ORM\Entity(repositoryClass="path\to\your\repository") 

存儲庫行雲的子類不頂超。所以你

/** 
* 
* @ORM\Entity(repositoryClass="path\to\your\ClassSubOneRepository") 
*/ 
class ClassSubOne extends ClassTop 
{ 
    ... 
} 

,而不是

/** 
* 
* @ORM\Entity(repositoryClass="Proj\Bundle\MyBundle\Repository\ClassTopRepository") 
*/ 
class ClassTop 
{ 
    ... 
}