为什么这个 Doctrine OneToOne Self-referencing 双向关联不起作用?
Why is this Doctrine OneToOne Self-referencing Bidirectional association not working?
我们有两个实体使用 InheritanceType("SINGLE_TABLE")
。
定义DiscriminatorMap
的parentclass是Note
。两个children分别是Comment
和Message
.
有些情况下我们想从 message
复制 comment
。
我们想指出发生这种情况的位置,因此我们添加了一个名为 copied_to_id
的列。每次我们将 message
复制到 comment
时,我们都会将 messages
的 copied_to_id
设置为新创建的 comment
的 id
。
现在我们向 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
id
和 referencedColumnName
但似乎没有任何效果。
docs 中的示例似乎与我描述的示例类似。
在这个 article 中,我注意到它提到一对一不能延迟加载反向。也许这就是我们遇到的问题,但是有什么解决办法呢?
学说:2.13.1
Laravel-Doctrine: 1.7.9
显然这是一个已知问题。
此 post 中的选项 4 和 6 是似乎可行的解决方法。
我们有两个实体使用 InheritanceType("SINGLE_TABLE")
。
定义DiscriminatorMap
的parentclass是Note
。两个children分别是Comment
和Message
.
有些情况下我们想从 message
复制 comment
。
我们想指出发生这种情况的位置,因此我们添加了一个名为 copied_to_id
的列。每次我们将 message
复制到 comment
时,我们都会将 messages
的 copied_to_id
设置为新创建的 comment
的 id
。
现在我们向 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
id
和 referencedColumnName
但似乎没有任何效果。
docs 中的示例似乎与我描述的示例类似。
在这个 article 中,我注意到它提到一对一不能延迟加载反向。也许这就是我们遇到的问题,但是有什么解决办法呢?
学说:2.13.1
Laravel-Doctrine: 1.7.9
显然这是一个已知问题。
此 post 中的选项 4 和 6 是似乎可行的解决方法。