原则添加外键但不创建关联

时间:2019-02-07 10:31:46

标签: doctrine domain-driven-design

在当前应用程序中,我们遵循DDD样式并依赖DDD,我们具有聚合范围,并且不能在该范围内使用其他聚合(如果需要建立关系,则只能使用其他聚合的ID)。

示例:我们有“用户”聚合和“媒体”聚合,“用户”可以有一个与“媒体”相关的图标,但取决于DDD,我无法做到

/**
 * @OneToOne(targetEntity="Media")
 * @JoinColumn(name="icon_id", referencedColumnName="id")
 */
private $icon;

在这种情况下,我需要将整个Media实体传递给违反DDD规则的User。

所以要遵循DDD规则,我做到了

/**
 * @var MediaId
 *
 * @ORM\Column(type="id", nullable=true)
 */
private $iconid;

但是这意味着我们甚至可以通过任何id来传递它。可以肯定的是,我可以查询数据库以检查Media是否存在,但是这又违反了DDD规则,因为当我们处理用户集合时,我们无法对媒体集合进行任何操作。

所以问题是我能以某种方式告诉学说在不创建关联的情况下添加外键吗?还是我需要通过迁移手动添加外键?

1 个答案:

答案 0 :(得分:0)

您可以在设置器中执行以下操作:

mediaPlayer.reset();

这将为您提供一个代理元素,因此您可以与之建立关系。

请参阅: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/advanced-configuration.html#reference-proxies

在getter中,您只需返回对象的ID