我有2个实体,Contact和ContactType。 所有者实体是Contact,其属性为$ type:
/**
* @ORM\ManyToOne(targetEntity="Evo\BackendBundle\Entity\ContactType")
* @ORM\JoinColumn(nullable=true)
*/
protected $type = null;
我现在必须将此关系设置为必需。我尝试了以下方法:
/**
* @ORM\ManyToOne(targetEntity="Evo\BackendBundle\Entity\ContactType")
* @ORM\JoinColumn(nullable=false)
*/
protected $type = 2;
但我得到一个错误,这是非常逻辑的。我应该将一个实体(ID为2)设置为默认值,而不是整数。但我不知道该怎么做。我以前读过我不应该对DB进行任何查询或在实体内部使用EntityManager。那么如何设置默认的ContactType?
答案 0 :(得分:1)
更好的解决方案可能是将这种逻辑放在某种“经理”中。服务,例如ContactManager。
<?php
use Doctrine\ORM\EntityManagerInterface;
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]