Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 第2条:来自另一个OneToOne协会PFK的OneToOne_Php_Doctrine Orm - Fatal编程技术网

Php 第2条:来自另一个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")

我有一个问题。我使用的是信条2.0,我想知道是否可以通过使用另一个OneToOne协会创建的PFK建立OneToOne关联,如下图所示

我的代码如下所示:

用户类别:

/**
 * @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;
}