gpt4 book ai didi

php - 可空的自引用与复合键使用 Doctrine

转载 作者:行者123 更新时间:2023-12-03 20:20:37 25 4
gpt4 key购买 nike

我遇到了 Doctrine ORM 2.5 的问题。当我尝试使用其主键的一部分作为外键的一部分来加载具有可选的 ManyToOne 引用的实体的实例时,会发生问题。

该实体如下所示:

class Category
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Client")
* @ORM\JoinColumn(name="client_id", referencedColumnName="client_id"))
* @var Client
*/
protected $client;

/**
* @ORM\Id
* @ORM\Column(type="string")
* @var string
*/
protected $category_id;

/**
* @ORM\ManyToOne(targetEntity="Category")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="parent_id", referencedColumnName="category_id", nullable=true),
* @ORM\JoinColumn(name="client_id", referencedColumnName="client_id", nullable=false)
* })
* @var Category
*/
protected $parent;

/**
* @ORM\Column(type="translated")
* @SAP\Mapping(fieldName="name")
* @var string
*/
protected $name;
}

如您所见,类别的每个子项都必须与其父项具有相同的 client_id。
问题似乎是 Doctrine 期望父键存在的外键不是 empfy (= 至少一个字段具有非空值)。这显然总是正确的,因为 FK 包含 PK 的一部分。

有没有办法告诉 Doctrine 如果 parent_id 为空,它不应该尝试加载父级?

我看到的唯一替代方法是通过使用人工自动生成的 pk 或为 parent_client_id 添加一个新列来更改架构,并确保它等于 PHP-land 中的 client_id。

有没有更好的办法?

最佳答案

这似乎是这里报告的错误:https://github.com/doctrine/orm/issues/4384
来自对该问题设置的评论 fetch="EAGER"解决 Doctrine Missing value for primary key错误。不是一个很好的解决方案,但它可能适合您,具体取决于您的用例。

关于php - 可空的自引用与复合键使用 Doctrine ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28063824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com