我有实体
<?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
{
....
}
我的问题是,当我调用find()
(或findOneBy
,findAll
等)方法时,我遇到了Oracle错误。
$entityManager->getRepository('ProjMyBundle:ClassSubOne')->findAll()
在查询中
SELECT field, field2 FROM CLASSTOP WHERE aVAL IN ()
鉴别器值"ValOne"
未映射,不在Doctrine中传递。
非常感谢任何帮助。
答案 0 :(得分: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
{
...
}