gpt4 book ai didi

doctrine-orm - 升级后与 Dotrine 关联错误

转载 作者:行者123 更新时间:2023-12-02 13:40:11 25 4
gpt4 key购买 nike

我正在努力将产品从 Symfony 2.7 升级到 4.2(目前为 3.4),但我遇到了一些现有的关联问题。

  • 字段 AppBundle\Entity\User#currentBillingAgreement 位于双向关系的拥有方,但目标实体 AppBundle\Entity\BillingAgreement# 上指定的mappedBy 关联不包含所需的“inversedBy”属性。
  • 如果关联 AppBundle\Entity\User#currentBillingAgreement 是一对一的,则反面 AppBundle\Entity\BillingAgreement#user 也必须是一对一的。

User 实体具有以下关联:

    /**
* @var BillingAgreement
* @ORM\OneToOne(
* targetEntity="AppBundle\Entity\BillingAgreement",
* inversedBy="user",
* cascade={"persist"}
* )
* @ORM\JoinColumn(
* name="currentBillingAgreementID",
* referencedColumnName="billingAgreementID"
* )
*/
protected $currentBillingAgreement;

/**
* @var ArrayCollection
* @ORM\OneToMany(
* targetEntity="AppBundle\Entity\BillingAgreement",
* mappedBy="user",
* cascade={"persist"}
* )
* @Serializer\Exclude()
*/
protected $billingAgreements;

BillingAgreement 有这样的内容:

    /**
* @var User
* @ORM\ManyToOne(
* targetEntity="AppBundle\Entity\User",
* inversedBy="billingAgreements"
* )
* @ORM\JoinColumn(
* name="userID",
* referencedColumnName="userID",
* nullable=false
* )
*/
protected $user;

当我将 OneToOne 映射添加到 BillingAgreement::$user 时 (@ORM\OneToOne(targetEntity="AppBundle\Entity\User", inversedBy="currentBillingAgreement")),我收到一个新错误:

  • 字段 AppBundle\Entity\BillingAgreement#user 位于双向关系的拥有方,但目标实体 AppBundle\Entity\User# 上指定的mappedBy 关联不包含所需的“inversedBy”属性。

原来的 2 个错误仍然存​​在。

最佳答案

您可以进行 OneToOne 关联 unidirectional通过从注释中删除 inversedBy="user",

为 BillingAgreement 实体上的每个关联使用不同字段:

/**
* @var User
* @ORM\ManyToOne(
* targetEntity="AppBundle\Entity\User",
* inversedBy="billingAgreements"
* )
* @ORM\JoinColumn(
* name="userID",
* referencedColumnName="userID",
* nullable=false
* )
*/
protected $user;

/**
* @var User
* @ORM\OneToOne(targetEntity="AppBundle\Entity\User", inversedBy="currentBillingAgreement")
*/
protected $singleUser;

在用户实体中:

/**
* @var BillingAgreement
* @ORM\OneToOne(
* targetEntity="AppBundle\Entity\BillingAgreement",
* inversedBy="singleUser",
* cascade={"persist"}
* )
* @ORM\JoinColumn(
* name="currentBillingAgreementID",
* referencedColumnName="billingAgreementID"
* )
*/
protected $currentBillingAgreement;

/**
* @var ArrayCollection
* @ORM\OneToMany(
* targetEntity="AppBundle\Entity\BillingAgreement",
* mappedBy="user",
* cascade={"persist"}
* )
* @Serializer\Exclude()
*/
protected $billingAgreements;

引用文献

关于doctrine-orm - 升级后与 Dotrine 关联错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55839555/

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