簡體   English   中英

來自另一個OneToOne協會的PFK的教義2 OneToOne

[英]Doctrine 2 OneToOne from PFK of another OneToOne association

我有一個問題。 我正在使用Doctrine 2.0 ,我想知道是否有可能通過使用另一個OneToOne關聯創建的PFK建立OneToOne關聯,如下圖所示。

在此處輸入圖片說明

我的代碼如下所示:

用戶類別:

/**
 * @ORM\Entity()
 */
class User extends \Kdyby\Doctrine\Entities\IdentifiedEntity
{

    /**
     * @ORM\OneToOne(targetEntity="AllianceMember", mappedBy="user")
     * var AllianceMember
     */
    protected $allianceMembership;
}

AllianceMember類:

/**
 * @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看到與教義2同時看到主鍵和外鍵之后,就可以對@Id使用映射的實體

我認為您只需要刪除一些JoinColumn語句即可。 由於@user已經被指定為您的@Id ,因此不必將user_id指定為JoinColumn:

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

/**
 *
 * @ORM\Entity()
 */
class AllianceRole extends \Kdyby\Doctrine\Entities\BaseEntity
{
    /**
     * @ORM\Id
     * @ORM\OneToOne(targetEntity="AllianceMember", inversedBy="role")
     * @var AllianceMember
     */
    protected $allianceMember;
}

AllianceMember的ID為user_id,AllianceRole的ID為AllianceMember的ID,即user_id。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM