我有两个实体,Contact和ContactType。所有者实体是Contact,具有属性$type:
/**
* @ORMManyToOne(targetEntity="EvoBackendBundleEntityContactType")
* @ORMJoinColumn(nullable=true)
*/
protected $type = null;
我现在必须把这种关系定为强制性的。我尝试了以下方法:
/**
* @ORMManyToOne(targetEntity="EvoBackendBundleEntityContactType")
* @ORMJoinColumn(nullable=false)
*/
protected $type = 2;
但我犯了一个错误,这很符合逻辑。我应该将一个实体(id为2)设置为默认值,而不是整数。但我不知道该怎么做。我之前读过,我不应该对DB进行任何查询,也不应该在实体内部使用EntityManager。那么,我如何设置默认的ContactType呢?
更好的解决方案可能是将此逻辑放入某种"管理器"服务中,例如ContactManager。
<?php
use DoctrineORMEntityManagerInterface;
class ContactManager
{
private $manager;
public function __construct(EntityManagerInterface $manager)
{
$this->manager = $manager;
}
public function createContact(ContactType $type = null)
{
if (!$type instanceof ContactType) {
$type = $this->manager->getReference('ContactType', 2);
}
return new Contact($type);
}
}
然后定义您的服务(例如在services.yml中):
contact_manager:
class: ContactManager
arguments: [@doctrine.orm.entity_manager]