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



我有两个实体,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]

相关内容

  • 没有找到相关文章

最新更新