我有这个实体Contact.php
#[ORM\DiscriminatorColumn(name: 'type', type: 'string')]
#[ORM\DiscriminatorMap([
'person' => ContactType\Person::class,
'family' => ContactType\Family::class,
'company' => ContactType\Company::class,
])]
还有像这样的工厂:
protected function getDefaults(): array
{
return [
'createdAt' => self::faker()->dateTime(),
'isArchived' => 0,
...
'type' => Person::class,
];
}
在我的 AppFixtures 文件中,我有这样的内容:
public function load(ObjectManager $manager): void
{
$user = UserFactory::createOne();
$contacts = ContactFactory::createMany(5, [
'createdBy' => $user
]);
$manager->flush();
}
调用命令
php bin/console doctrine:fixtures:load
最终会出现此错误:
In Instantiator.php line 84:
Cannot set attribute "type" for object "App\Entity\Contact" (not public and no setter).
In PropertyAccessor.php line 544:
Could not determine access type for property "type" in class "App\Entity\Contact".
我的目标是拥有可用的夹具,以便我可以测试代码或只是创建自己的虚拟数据。 我不知道该怎么做,甚至不知道去哪里寻找。任何建议都非常欢迎。
DiscriminatorColumn
和 DisciminatorMap
用于类表继承 (https://www.doctrine-project.org/projects/doctrine-orm/en/2.17/reference/inheritance-mapping.html#class-table-继承)。
您指定 3 种映射类型(每一种都存在于 DiscriminatorMap 中):
Person
、Family
和 Company
。
#[ORM\DiscriminatorMap([
'person' => ContactType\Person::class,
'family' => ContactType\Family::class,
'company' => ContactType\Company::class,
])]
但是例外情况是您尝试创建一个联系人,但上面没有类型。
您可以使用 ContactFactory 编辑您的问题吗?您创建了 Contact 类还是 Person 类?