Symfony2-扩展实体,抽象实体

Kam*_*l P 2 php symfony

我有2个具有相同字段的实体-父级,子级,顺序。实际上,这是一种机制,这3个字段不适用于该实体的内容,例如名称,标题,类别等。

我想将此字段设置为一个地方,一个班级,并且正在考虑将其放在哪里。应该是抽象类吗?还是我应该做个特质?

我也可以使用ORM \ Discriminator机制,但是我认为这是为了其他目的,而不是我想做的事情。

joh*_*ith 6

我会用@MappedSuperClass注释和共享字段来创建一个抽象类,并且实体将它们扩展

这是共享的created_at字段的示例

namespace Your\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\MappedSuperclass;



/**
 * Abstract base class to be extended by my entity classes with same fields
 *
 * @MappedSuperclass
 */
abstract class AbstractEntity {

    /**
     * @var integer
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $createdAt;


    /**
     * Get id
     * @return integer
     */
    public function getId() {
        return $this->id;
    }

    /**
     * Get createdAt
     * @return \DateTime
     */
    public function getCreatedAt() {
        return $this->createdAt;
    }

    /**
     * Set createdAt
     *
     * @param \DateTime $createdAt
     *
     * @return AbstractEntity
     */
    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;

        return $this;
    }

} 
Run Code Online (Sandbox Code Playgroud)

您的实体都扩展了此类,例如:

class YourEntityClass extends AbstractEntity
{
Run Code Online (Sandbox Code Playgroud)

在YourEntityClass中,必须对$ id属性进行“保护”