Doctrine:我应该为多对多关系创建一个中间实体吗?

问题描述 投票:0回答:1

在最近的会议上,我得到一个要求,对于所有的多对多关系,我们应该创建中间实体,并且有多对一和一对多关系。 例如,我们有实体“用户”和“角色”。我需要创建一个中间实体“UserRole”。

class User implements UserInterface, PasswordAuthenticatedUserInterface
{
    /**
     * @ORM\OneToMany(targetEntity=UserRole::class, mappedBy="user")
     */
    private $userRole;
}
class UserRole
{
    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="userRole")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="Role", inversedBy="userRole")
     * @ORM\JoinColumn(nullable=false)
     */
    private $role;
}
class Role
{
    /**
     * @ORM\OneToMany(targetEntity=UserRole::class, mappedBy="role")
     */
    private $userRole;
}

我知道一些开发人员使用这种方法以防 UserRole 实体中有一些额外的参数,但在上面的示例中 - 没有。是否有一些学说官方建议或最佳实践?什么是优点和缺点?

php symfony doctrine many-to-many
1个回答
0
投票

除了你说的最大的pro,所以有可能加强与其他领域的联系,我想不出任何相关的pro。

一个缺点是 Doctine/Symfony + DoctrineBundle 执行更多的代码来注册额外的实体,为其存储库等。它使应用程序稍微不太优化。另一个是如果你有很多多对多的中间实体,你的文件列表可能会变大,每个文件一个。

我会说你应该使用常规的多对多映射,除非你想在未来节省重构时间,因为你确定或几乎确定关系将被扩展。

© www.soinside.com 2019 - 2024. All rights reserved.