Doctrine Entity中的重用方法

时间:2014-03-27 19:26:38

标签: php oop symfony doctrine-orm

我在Symfony 2框架中有3个实体:

  • 有机会
  • 公司
  • 用户

这些实体有一个共同属性,因为它们具有ManyToMany关系:

 /**
 * @ORM\ManyToMany(targetEntity="Fccq\CoreBundle\Entity\Tag", cascade={"persist"})
 */
private $tags;

还有一些方法:

/**
 * @param array $tags
 */
public function addListTags($tags)
{
    foreach($tags as $tag)
    {
        $this->addTag($tag);
    }
}

/**
 * @param Tag $tag
 */
public function addTag(\Fccq\CoreBundle\Entity\Tag $tag)
{
    if (!$this->tags->contains($tag)) {
        $this->tags->add($tag);
    }
}

/**
 * @param Tag $tag
 */
public function removeTag(\Fccq\CoreBundle\Entity\Tag $tag)
{
    $this->tags->removeElement($tag);
}

我不希望这个代码重复,所以我开始实现“traits”。工作正常,但不支持php 5.3(我的生产环境)。 简单继承不是一个好的解决方案,因为我的User实体已经从另一个类继承。

有什么想法吗? THX

1 个答案:

答案 0 :(得分:2)

如果您仍然使用继承,将这些函数放在基本标记类中,并通过您的机会,公司和用户扩展的类扩展它,该怎么办?我不知道其他解决方案,因为您无法在实体类中使用辅助函数(或者至少不建议这样做)。也许别人还有一些想法......