为什么这个 Doctrine OneToOne Self-referencing 双向关联不起作用?

Why is this Doctrine OneToOne Self-referencing Bidirectional association not working?

我们有两个实体使用 InheritanceType("SINGLE_TABLE")

定义DiscriminatorMap的parentclass是Note。两个children分别是CommentMessage.

有些情况下我们想从 message 复制 comment

我们想指出发生这种情况的位置,因此我们添加了一个名为 copied_to_id 的列。每次我们将 message 复制到 comment 时,我们都会将 messagescopied_to_id 设置为新创建的 commentid

现在我们向 Message 实体添加了一个关联,就像这样...

    /**
     * @var Comment
     *
     * @ORM\OneToOne(targetEntity=Comment::class, inversedBy="copiedFrom")
     * @ORM\JoinColumn(name="id", referencedColumnName="copied_to_id", nullable=true)
     */
    protected $copiedTo;

一切正常,我们能够通过请求 $message->copiedTo 获得新创建的 comment。然而,一旦我们在此处以及评论 class 中添加了 inversedBy 部分,这一切都发生了变化。我们希望能够通过使用 $comment->copiedFrom.

来获得反向关系
    /**
     * @var Message
     *
     * @ORM\OneToOne(targetEntity=Message::class, mappedBy="copiedTo")
     */
    protected $copiedFrom;

一旦我们这样做它就停止工作,不仅是从 null 复制的,而且当我们查询 Comments 时它只返回一个评论(而不是应该返回的 7 个)。

我们是否正确地认为这是建立这种一对一关系的方式?如果是,我们可能做错了什么?

(我们在eloquent建立了这个关系,很容易,所以我们认为它是正确的)

我们尝试在关联中移动并使用其 mappedBy 和 inversedBy 以及更改 JoinColumn idreferencedColumnName 但似乎没有任何效果。

docs 中的示例似乎与我描述的示例类似。

在这个 article 中,我注意到它提到一对一不能延迟加载反向。也许这就是我们遇到的问题,但是有什么解决办法呢?

学说:2.13.1 Laravel-Doctrine: 1.7.9

显然这是一个已知问题。

post 中的选项 4 和 6 是似乎可行的解决方法。