簡體   English   中英

Symfony2-繼承-存儲庫查找方法

[英]Symfony2 - Inheritance - repository find method

我有實體

<?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中傳遞。

任何幫助將非常感激。

您需要為子類而不是頂級子類存儲類。 您將子類視為完全定義的類,僅此而已。 然后,當您需要查詢您的實體時,您無需尋找頂層實體,而是尋找子類。 我不知道我是否在這里明確表示自己!

在您的情況下:

@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
{
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM