Мне нужно расширить сущность Doctrine с наследованием одной таблицы с помощью DiscriminatorColumn и DiscriminatorMap от разных значений до одного и того же подкласса.
На данный момент я пытаюсь сделать это таким образом, но только последнее значение каждой сущности применяется. Я искал другие способы сделать это с массивами или коллекциями, но ничего не нашел в Doctrine или Symphony Documentation. Смотрите код аннотации ниже:
use Doctrine\ORM\Mapping as ORM;
/**
* Classe abstrata para definição de um objeto produto
*
* @author Maycon Brito <[email protected]>
* @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.
Другое возможное решение:
Дискриминаторный столбец (codigosubtipo) является внешним ключом другой таблицы (subtipo). В этой таблице есть столбец, который не является идентификатором, но ваши значения являются определенными для определения унаследованного подкласса выше. Если было возможно определить DiscrimnatorColumn внутреннего соединения столбца другой таблицы, эта проблема будет решена.
Задача ещё не решена.
Других решений пока нет …