Php 第2条:来自另一个OneToOne协会PFK的OneToOne
我有一个问题。我使用的是信条2.0,我想知道是否可以通过使用另一个OneToOne协会创建的PFK建立OneToOne关联,如下图所示 我的代码如下所示: 用户类别:Php 第2条:来自另一个OneToOne协会PFK的OneToOne,php,doctrine-orm,Php,Doctrine Orm,我有一个问题。我使用的是信条2.0,我想知道是否可以通过使用另一个OneToOne协会创建的PFK建立OneToOne关联,如下图所示 我的代码如下所示: 用户类别: /** * @ORM\Entity() */ class User extends \Kdyby\Doctrine\Entities\IdentifiedEntity { /** * @ORM\OneToOne(targetEntity="AllianceMember", mappedBy="user")
/**
* @ORM\Entity()
*/
class User extends \Kdyby\Doctrine\Entities\IdentifiedEntity
{
/**
* @ORM\OneToOne(targetEntity="AllianceMember", mappedBy="user")
* var AllianceMember
*/
protected $allianceMembership;
}
联盟成员类别:
/**
* @ORM\Entity()
*/
class AllianceMember extends \Kdyby\Doctrine\Entities\BaseEntity
{
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="User", inversedBy="allianceMembership")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
* @var User
*/
protected $user;
/**
* @ORM\OneToOne(targetEntity="AllianceRole", mappedBy="allianceMember")
* var AllianceRole
*/
protected $role;
AllianceRole类:
/**
*
* @ORM\Entity()
*/
class AllianceRole extends \Kdyby\Doctrine\Entities\BaseEntity
{
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="AllianceMember", inversedBy="role")
* @ORM\JoinColumn(name="role_id", referencedColumnName="user_id", nullable=false)
* @var AllianceMember
*/
protected $allianceMember;
}
当我试图获取用户实体的实例时,出现以下错误:
The column user_id must be mapped to a field in class App\Entity\AllianceMember since it is referenced by a join column of another class.
有可能吗
谢谢。是的,自条令2.1以来,为您的
@Id
使用映射实体已成为可能,请参见
我认为您只需要删除一些JoinColumn
语句。由于已将@user
指定为您的@Id
,因此无需将@user\u Id
指定为列:
/**
* @ORM\Entity()
*/
class AllianceMember extends \Kdyby\Doctrine\Entities\BaseEntity
{
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="User", inversedBy="allianceMembership")
* @var User
*/
protected $user;
/**
* @ORM\OneToOne(targetEntity="AllianceRole", mappedBy="allianceMember")
* var AllianceRole
*/
protected $role;
及
AllianceMember的id是用户id,AllianceRole的id是AllianceMember的id,即用户id。OPs代码可以工作,但随着您的更改,它会中断。这有点奇怪。
/**
*
* @ORM\Entity()
*/
class AllianceRole extends \Kdyby\Doctrine\Entities\BaseEntity
{
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="AllianceMember", inversedBy="role")
* @var AllianceMember
*/
protected $allianceMember;
}