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()(またはfindOneByfindAllなど) メソッドを呼び出すと、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 に答える