猿问

如何在超类中拥有实体的列?

我想在实体的超类/基类中拥有一些属性。我想要实现的最简单的例子是这样的:


<?php

class BaseEntity{

    /**

     * @ORM\Id

     * @ORM\Column(type="integer")

     * @ORM\GeneratedValue

     * @var int internal ID

     */

    private int $id;


    public function getId(): int{

        return $this->id;

    }

}

/**

 * @ORM\Entity

 * @ORM\Table(name="someentities")

 */

class SomeEntity extends BaseEntity{

    // more stuff

}

有没有办法用 ORM 来做到这一点?上面的例子不起作用,Doctrine在SomeEntity中找不到主键。您可以通过使 BaseEntity 本身成为实体来做到这一点,但我想避免这种情况。


萧十郎
浏览 126回答 1
1回答

catspeake

基本上你需要做的是使用Mapped Superclasses。对于上面的例子,它看起来像这样:<?php/** @ORM\MappedSuperclass */class BaseEntity{    /**     * @ORM\Id     * @ORM\Column(type="integer")     * @ORM\GeneratedValue     * @var int internal ID     */    private int $id;    public function getId(): int{        return $this->id;    }}/** * @ORM\Entity * @ORM\Table(name="someentities") */class SomeEntity extends BaseEntity{    // more stuff}如果您偶然发现这个问题,您可能也在寻找Embeddables,具体取决于您想要完成的任务。
随时随地看视频慕课网APP
我要回答