0

我有实体

<?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()(or findOneBy, findAll, 等) 方法时,我有一个 Oracle 错误。

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

在我的查询中

SELECT field, field2 FROM CLASSTOP WHERE aVAL IN () 

鉴别器值"ValOne"不是映射,也不是在 Doctrine 中传递的。

任何帮助将非常感激。

4

1 回答 1

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
{
    ...
}
于 2014-02-05T02:55:16.257 回答