列类继承映射理论的重复定义

时间:2019-12-10 02:09:33

标签: symfony doctrine-orm doctrine symfony4

我的项目包含多种“计算”类型。 我尝试这样设置第一个:

AbtractComputed:

    AttributeError                            Traceback (most recent call last)
...

AttributeError: 'DataFrame' object has no attribute 'name'

ComputedProbeImport:

<?php

namespace App\Entity;

use App\Repository\ComputedRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Mapping\MappingException;
use ES\Common\Enum\ComputedEnum;
use ReflectionException;

abstract class AbstractComputed
{
    /** @var integer */
    protected $id;

    /** @var string */
    protected $name;

    /** @var string */
    protected $type;

    /**
     * User constructor.
     */
    public function __construct()
    {
    }

    /**
     * @param ClassMetadata $metadata
     * @throws MappingException
     */
    public static function loadMetadata(ClassMetadata $metadata)
    {
        // @formatter:off
        $builder = new ClassMetadataBuilder($metadata);
        $builder
            ->setTable('computed')
            ->setCustomRepositoryClass(ComputedRepository::class)
            ->setJoinedTableInheritance()
            ->setDiscriminatorColumn('kind')
            ->createField('id', Types::INTEGER)
                ->makePrimaryKey()
                ->generatedValue()
            ->build()
            ->createField('name', Types::STRING)
                ->length(255)
            ->build()
            ->createField('type', Types::STRING)
                ->length(255)
                ->nullable()
            ->build()
        ;
        // @formatter:on
        foreach (static::getDiscriminatorMap() as $discr => $class) {
            $metadata->addDiscriminatorMapClass($discr, $class);
        }
    }

    /**
     * @return string
     */
    abstract public static function getKind(): string;

    /**
     * @return array
     */
    public static function getDiscriminatorMap()
    {
        return [
            ComputedProbeImport::getKind() => ComputedProbeImport::class,
        ];
    }

    /**
     * @return int|null
     */
    public function getId(): ?int
    {
        return $this->id;
    }

    /**
     * @return string|null
     */
    public function getName(): ?string
    {
        return $this->name;
    }

    /**
     * @param string|null $name
     * @return self
     */
    public function setName(string $name = null): self
    {
        $this->name = $name;

        return $this;
    }

    /**
     * @return string|null
     */
    public function getType(): ?string
    {
        return $this->type;
    }

    /**
     * @param string $type
     * @return self
     * @throws ReflectionException
     */
    public function setType(string $type): self
    {
        if (!ComputedEnum::isValidConstValue($type))
        {
            throwException(new \Exception('Invalid Computed type.'));
        }

        $this->type = $type;

        return $this;
    }
}

但是当我运行<?php namespace App\Entity; use Doctrine\ORM\Mapping\ClassMetadata; use ES\Common\Enum\ComputedEnum; class ComputedProbeImport extends AbstractComputed { /** * @inheritDoc */ public static function getKind(): string { return ComputedEnum::PROBE_IMPORT; } /** * @param ClassMetadata $metadata */ public static function loadMapping(ClassMetadata $metadata) { } }

我不明白为什么控制台会返回此错误:

bin/console doctrine:schema:update --dump-sql

// stackoverflow希望我添加更多文本,以便 我已经尝试清除缓存,但这无济于事... 我讨厌注释映射,这就是为什么我使用类metadataBuilder的原因,但是我在子级中放置了一个空函数,从技术上讲,此实体未映射?:/

0 个答案:

没有答案