我正在努力将产品从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 关联映射