ManyToOne关联映射到Doctrine 2中的Class Table Inheritance实体

时间:2012-10-19 18:59:48

标签: php doctrine doctrine-orm

我有一个Author实体,它是一个包含AuthorUserAuthorGroup的类表继承。

/**
 * Author
 *
 * @ORM\Table
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({"user" = "AuthorUser", "group" = "AuthorGroup"})
 */
class Author {
    // ...
}

AuthorUser与我的User实体和AuthorGroup与我的Group实体相关。

class AuthorUser extends Author
{
    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="User", inversedBy="?????")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;
}

class AuthorGroup extends Author
{
    /**
     * @var Group
     *
     * @ORM\ManyToOne(targetEntity="Group", inversedBy="?????")
     * @ORM\JoinColumn(name="group_id", referencedColumnName="id")
     */
    protected $user;
}

我不知道如何逆转这个。无论如何,问题是我必须将此CTI添加到我的Article实体字段。如何使用ManyToOne与此Article实体字段相关联?

class Article
{
    /**
     * @var Author
     *
     * @ORM\ManyToOne(targetEntity="Author", inversedBy="?????????")
     * @ORM\JoinColumn(name="author_id", referencedColumnName="id")
     */
    protected $author;
}

我不确定如何让它尽可能透明。当我创建新的Article时,我需要向User字段提供Groupauthor个对象。我遵循了这种行为,但它似乎没有帮助。它变得更加复杂。

1 个答案:

答案 0 :(得分:0)

一种解决方案可能是始终拥有AuthorGroups,即使只有一个作者。

否则,请查看https://github.com/FabienPennequin/DoctrineExtensions-Rateable

您可以使用该代码提供类似的Authored接口,该接口可以区分AuthorUser和AuthorGroup。