在学说2的一个领域内处理多重关系



我在教义 2 中一个字段中可能存在多重关系时遇到了一个小问题。例如,我有一个Article实体,其中包含一个名为author的字段。此字段是User实体的多对一。但是,此字段也可以与Group实体相关。那么,我到底该如何创建这样的架构呢?

我考虑过创建一个名为ArticleAuthor的新实体,它有两个字段:usergroup,并根据表单输入填充其中一个字段。这样,此表ArticleAuthor保存自己的id以及与正确表的正确关系。这是一种正确的方法吗?

这就是所谓的多态关联。Doctrine能够使用继承映射来处理这些

因此,您将定义您的基本实体,例如Author,然后您将有一个GroupAuthor和一个UserAuthor,它们都扩展了这一点。这两者都需要配置为基Author实体上的映射类。选择单表继承还是类表继承取决于您;最终结果将是相同的。

最后要做的是将UserAuthor实体关联到User实体,将GroupAuthor关联到Group实体。

然后你可以像这样使用它:

$author = $article->getAuthor();
if ($author instanceof UserAuthor) {
$user = $author->getUser();
} elseif ($author instanceof GroupAuthor) {
$group = $author->getGroup();
$users = $group->getUsers(); // Not sure if you'd need this?
}

编辑:示例映射

"父"实体Author.php

/**
* @ORMEntity
* @ORMTable(name="authors")
* @ORMInheritanceType("JOINED")
* @ORMDiscriminatorColumn(name="type", type="string")
* @ORMDiscriminatorMap( {"user" = "UserAuthor", "group" = "GroupAuthor"} )
*/
class Author
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/* any other shared fields... */
}

映射实体,UserAuthor.php

/**
* @ORMEntity
* @ORMTable(name="user_authors")
*/
class UserAuthor extends Author
{
/* All columns unique to the UserAuthor entity... */
}

相关内容

  • 没有找到相关文章

最新更新