Doctrine2 - 继承与关系

时间:2014-05-12 08:53:22

标签: doctrine-orm

是否有可能在学说中解决这个问题?我有一个名为评论的实体,此实体与另一个实体来电者作者有关系。关系由两列组成: author_id author_type

/**
 * @ORM\Entity
 * @ORM\Table(name="comments")
 */
class Comment
{
    /**
     * @ORM\ManyToOne(targetEntity="Entities\Authors\Guest", cascade={"persist"})
     * @ORM\JoinColumns({
     *         @ORM\JoinColumn(name="author_id", referencedColumnName="author_id", nullable=FALSE),
     *         @ORM\JoinColumn(name="author_type", referencedColumnName="author_type", nullable=FALSE)
     * })
     **/
    protected $author;
}

这种关系是因为作者可能是系统用户,访客,facebook用户等,每个用户都有自己的作者ID和作者类型(访客,系统,脸书等),所以作者实体看起来像这样: / p>

/**
 * @ORM\Entity
 * @ORM\Table(name="authors")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="author_type", type="string")
 * @ORM\DiscriminatorMap({
 *         "guest"        = "Guest",
 *         "system"    = "System",
 *         "facebook"    = "Facebook",
 *         "twitter"    = "Twitter",
 *         "google"    = "Google",
 *         "github"    = "Github"
 * })
 */
class Guest
{
}

要分隔每个作者类型,我使用单表继承。列 author_type 。作者表的主键是 author_id author_type

当我加载评论实体时,它已成功加载作者,但问题是当我尝试创建新的评论实体并将其存储到数据库时。存储在注释表中的author_id是可以的,但即使将正确的作者实体添加到注释实体,author_type也始终是“guest”。

那么有可能解决这个问题吗?或者我应该使用不同类型的关系,添加额外的列等?

0 个答案:

没有答案