我的项目包含多种“计算”类型。 我尝试这样设置第一个:
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的原因,但是我在子级中放置了一个空函数,从技术上讲,此实体未映射?:/