2014-09-20 52 views
0

我正在一個現有的數據庫上實現一個新的應用程序。現有數據庫正在被移動應用程序使用,並且由於移動應用程序正在由不同的團隊開發,所以我不允許更改現有表格的結構。如何使用單獨的鏈接表實現OneToMany關聯?

現有的數據庫有一個用戶表,對於我自己的應用程序用戶,我創建了我自己的表和Doctrine實體,名爲PortalUser(表portal_user)。

PortalUser實體將有一個名爲$ children的OneToMany關聯,它指向現有的用戶實體。換句話說,每個PortalUser都有零個或多個子用戶實體。

來實現這一點的最自然的方式是有這樣的事情(簡體):

用戶(現有的實體):

class User 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var PortalUser 
    * 
    * @ORM\ManyToOne(targetEntity="PortalUser", inversedBy="children") 
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id") 
    */ 
    private $parent; 
} 

PortalUser實體:

class PortalUser 
{ 
    /** 
    * @var int 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var array 
    * @ORM\OneToMany(targetEntity="User", mappedBy="parent") 
    */ 
    protected $children; 
} 

這將在現有的用戶表中創建一個不允許的新列「parent_id」。那麼是否有可能通過parent_id和child_id列獲取單獨的鏈接表,等同於常規的ManyToMany鏈接表?如果是的話,那麼什麼註釋會導致這樣的結構?

回答

0

好吧,這很尷尬。原來它在Doctrine文檔中:

單向一對多關聯可以通過連接 表映射。根據Doctrine的觀點,它簡單地映射爲單向多對多的 ,因此對連接列之一的唯一約束強制執行一對多基數。

Doctrine manual