【问题标题】:Doctrine: Should I create an intermediate entity for many to many relation?学说:我应该为多对多关系创建一个中间实体吗?
【发布时间】:2023-02-26 12:51:15
【问题描述】:

在最近的会议上,我得到一个要求,对于所有多对多关系,我们应该创建中间实体并具有多对一和一对多关系。 例如,我们有实体“用户”和“角色”。我需要创建一个中间实体“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】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多