升级后与原则的关联错误



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

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

User实体具有以下关联:

/**
* @var BillingAgreement
* @ORMOneToOne(
*     targetEntity="AppBundleEntityBillingAgreement",
*     inversedBy="user",
*     cascade={"persist"}
* )
* @ORMJoinColumn(
*     name="currentBillingAgreementID",
*     referencedColumnName="billingAgreementID"
* )
*/
protected $currentBillingAgreement;
/**
* @var ArrayCollection
* @ORMOneToMany(
*     targetEntity="AppBundleEntityBillingAgreement",
*     mappedBy="user",
*     cascade={"persist"}
* )
* @SerializerExclude()
*/
protected $billingAgreements;

计费协议有这个:

/**
* @var User
* @ORMManyToOne(
*     targetEntity="AppBundleEntityUser",
*     inversedBy="billingAgreements"
* )
* @ORMJoinColumn(
*     name="userID",
*     referencedColumnName="userID",
*     nullable=false
* )
*/
protected $user;

当我将一对一映射添加到BillingAgreement::$user(@ORMOneToOne(targetEntity="AppBundleEntityUser", inversedBy="currentBillingAgreement"))时,我收到一个新错误:

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

并且保留了原来的 2 个错误。

您可以通过从注释中删除inversedBy="user",来使一对一关联单向。

对计费协议实体上的每个关联使用不同的字段

/**
* @var User
* @ORMManyToOne(
*     targetEntity="AppBundleEntityUser",
*     inversedBy="billingAgreements"
* )
* @ORMJoinColumn(
*     name="userID",
*     referencedColumnName="userID",
*     nullable=false
* )
*/
protected $user;
/**
* @var User
* @ORMOneToOne(targetEntity="AppBundleEntityUser", inversedBy="currentBillingAgreement")
*/
protected $singleUser;

在用户实体中:

/**
* @var BillingAgreement
* @ORMOneToOne(
*     targetEntity="AppBundleEntityBillingAgreement",
*     inversedBy="singleUser",
*     cascade={"persist"}
* )
* @ORMJoinColumn(
*     name="currentBillingAgreementID",
*     referencedColumnName="billingAgreementID"
* )
*/
protected $currentBillingAgreement;
/**
* @var ArrayCollection
* @ORMOneToMany(
*     targetEntity="AppBundleEntityBillingAgreement",
*     mappedBy="user",
*     cascade={"persist"}
* )
* @SerializerExclude()
*/
protected $billingAgreements;

引用

  • 教义2.6 关联映射

最新更新