如何在属性中设置默认实体关系?

时间:2015-04-02 08:16:22

标签: symfony doctrine-orm entity default entity-relationship

我有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?

1 个答案:

答案 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]