对于同一个子类,DocriminatorMap的不同值的学说

时间:2016-01-30 12:31:36

标签: php symfony doctrine-orm doctrine discriminator

我需要将具有单表继承的Doctrine Entity与DiscriminatorColumn和DiscriminatorMap从不同的值扩展到同一个子类。

目前我正试图这样做,但只是每个实体的最后一个值正在应用。我寻求其他方法来实现这一点,使用数组或集合,但我在Doctrine或Symphony文档中找不到任何内容。请参阅下面的注释代码:

use Doctrine\ORM\Mapping as ORM;

/**
 * Classe abstrata para definição de um objeto produto
 * 
 * @author Maycon Brito <maycon.brito@rede.bioextratus.rede>
 * @package  models/Doctrine/Entidades
 * @subpackage Produtos
 *
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="codigosubtipo", type="integer")
 * @ORM\DiscriminatorMap({
 *     "3" = "ProdutoAcabado",
 *     "12" = "ProdutoMarketing",
 *     "34" = "ProdutoMarketing",
 *     "36" = "ProdutoEmbalagem", 
 *     "46" = "ProdutoMarketing",
 *     "59" = "ProdutoEmbalagem", 
 *     "60" = "ProdutoEmbalagem", 
 *     "61" = "ProdutoEmbalagem", 
 *     "62" = "ProdutoEmbalagem", 
 *     "81" = "ProdutoEmbalagem", 
 *     "82" = "ProdutoMarketing",
 *     "83" = "ProdutoMarketing",
 *     "84" = "ProdutoMarketing",
 *     "86" = "ProdutoMarketing",
 *     "87" = "ProdutoMarketing",
 *     "89" = "ProdutoMarketing", 
 *     "90" = "ProdutoMarketing",
 *     "91" = "ProdutoMarketing",
 *     "92" = "ProdutoMarketing",
 *     "93" = "ProdutoMarketing",
 *     "94" = "ProdutoMarketing",
 *     "95" = "ProdutoMarketing",
 *     "96" = "ProdutoMarketing",
 *     "97" = "ProdutoMarketing",
 *     "98" = "ProdutoMarketing",
 *     "99" = "ProdutoMarketing",
 *     "100" = "ProdutoMarketing",
 *     "101" = "ProdutoMarketing",
 *     "102" = "ProdutoMarketing",
 *     "103" = "ProdutoEmbalagem", 
 *     "104" = "ProdutoEmbalagem", 
 *     "105" = "ProdutoAcabado",
 *     "107" = "ProdutoAcabado",
 *     "108" = "ProdutoEmbalagem", 
 *     "109" = "ProdutoEmbalagem", 
 *     "111" = "ProdutoEmbalagem", 
 *     "112" = "ProdutoEmbalagem", 
 *     "128" = "ProdutoEmbalagem",
 *     "123" = "ProdutoAcabado",
 *     "106" = "ProdutoMarketing",
 *     "110" = "ProdutoMarketing",
 *     "121" = "ProdutoMarketing",
 *     "125" = "ProdutoTerceirizado",
 *     "126" = "ProdutoMarketing",
 *     "127" = "ProdutoTerceirizado"
 * })
 * @ORM\Table(name="produtos", uniqueConstraints={@ORM\UniqueConstraint(name="id", columns={"id"})}, indexes={@ORM\Index(name="IDX_CodigoSubTipo", columns={"CodigoSubTipo"}), @ORM\Index(name="IDX_CodigoUnidade", columns={"CodigoUnidade"}), @ORM\Index(name="IDX_Volume", columns={"CodigoVolume"}), @ORM\Index(name="IDX_Classe", columns={"CodigoClasse"}), @ORM\Index(name="IDX_CompraAtivada", columns={"CompraAtivada"}), @ORM\Index(name="IDX_Linha", columns={"id_Linha"}), @ORM\Index(name="IDX_LinhaEnvase", columns={"id_LinhaEnvase"}), @ORM\Index(name="idx_Finalidade", columns={"Finalidade"}), @ORM\Index(name="IDX_CodigoProdutoRend", columns={"CodigoProdutoRend"})})
 * @ORM\Entity
 */
abstract class Produto implements InterfaceProduto {

例如,当我寻找所有“ProdutoMarketing”实体时,结果只是“ProdutoMarketing”,“codigosubtipo”列的值为126.

另一种可能的解决方案:

discriminatorcolumn(codigosubtipo)是另一个表(subtipo)的外键。此表有一个不是id的列,但是您的值是确定上面继承的子类的确定。如果可以定义另一个表的列的内部联接的DiscrimnatorColumn,则该问题将得到解决。

0 个答案:

没有答案